如何减少PHP中if-else语句的数量?

时间:2009-11-26 15:04:52

标签: php nested readability if-statement

我发现有很多if-else语句,特别是嵌套if else语句,这些语句使我的代码不易读取。如何减少PHP中if else语句的数量?

我的提示如下: 1.在合适的情况下使用switch语句; 2.在可行时使用exit()语句; 3.在可行时使用三元语句;

是否有其他提示可以减少if else语句,尤其是嵌套的if-else语句?

6 个答案:

答案 0 :(得分:20)

尽可能使用“早期返回”以减少嵌套深度。尝试使用布尔表达式求值。

示例:

function foo($param)
{
    $ret = false;

    if(userIsLoggedIn()) {
        if(is_array($param)) {
            if($param['count'] > 0) {
                $ret = true;
            }
            else {
                $ret = false;
            }
        }        
    }

    return $ret;
}

你可以改写:

function foo($param) 
{
    if(!userIsLoggedIn()) return false;
    if(!is_array($param)) return false;
    return $param['count'] > 0;
}

答案 1 :(得分:18)

将您的代码重构为较小的工作单元。条件逻辑过多是代码嗅觉,通常表明您的函数需要重构。

答案 2 :(得分:9)

有一种官方的学术方法可以重构和简化许多if条件,称为卡诺映射

它需要多个测试条件并尝试帮助创建涵盖所有必需案例的简化if语句。

您可以从wiki here了解更多信息。

答案 3 :(得分:3)

使用三元运算符,重构代码,编写函数或执行所有必要if else语句的类。

答案 4 :(得分:1)

多态性也可以摆脱一些,虽然在PHP中减少if / else因为它不是类型安全而更难实现......

答案 5 :(得分:1)

我处理了许多代码,这些代码充满了不断发展的业务逻辑,需要每隔一天进行修改。两个提示当然有助于我跟上修改:避免所有其他语句并尽快返回/退出。永远不要深入嵌套 - >创建子例程/函数。

用ifated语句替换所有else语句会使代码更容易从上到下阅读(条件和代码块的接近程度):

# business logic block
if ( $condition ) {
    # do something
    # code code code
} else {
    # code code code
    return;
}

# refactored:
if ( ! $contition ) {
    # code code code
    return;
}
if ( $condition ) {
    # code code code 
}

其次,尽快退货/退货。我的观点当然,但是当你已经确定子程序的结果时,我没有看到运行任何额外条件/测试的重点,特别是当你想从上到下阅读代码时。消除所有歧义会使事情变得更简单。

总而言之,我喜欢避免使用其他特别是在BL的长列表中。一旦知道结果就立即返回。如果嵌套级别大于2,则创建子例程/函数。