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

问题描述:

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

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

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

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

使用三元运算符,重构你的代码,编写一个函数或者一个完成if语句所需的类。

多态性可以摆脱一些的为好,allthough更难实现减少的if/else在PHP,因为它不是类型安全的...

尝试使用“早日重返”如果可能的话,以减少嵌套深度。尝试使用布尔表达式评估。

例子:

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; 
} 
+0

+1这是非常重要的,因为它可以减少几KB的文件大小! – Xeoncross 2009-11-26 15:22:29

+0

+1也适用于继续,休息,抛出。您通常可以保持较低的循环复杂度,从而使代码更具可读性。 – NikiC 2011-09-25 11:57:05

+5

另外我个人只会使用'return userIsLoggedIn()&& is_array($ param)&& $ param ['count']> 0;'这里。它简短而简洁。 – NikiC 2011-09-25 12:00:02

有重构和简化了很多if条件的官方学术方法,称为卡诺图

它需要多种测试条件,并试图协助创建涵盖所有必需案例的简化if陈述。

您可以通过wiki here了解关于它的更多信息。

我工作的很多代码都充满了不断发展的业务逻辑,需要每隔一天修改一次。两个提示确实帮助我跟上修改:避免所有其他语句,并尽快返回/退出。永远不要深入嵌套 - >创建子例程/函数。

与否定更换所有else语句if语句使代码更易于阅读从上到下(在condtion的接近性代码块):

# 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,则创建子例程/函数。

+0

这当然可以重构为: – 2011-10-01 20:20:18