13、避免深层嵌套

  太多层的嵌套会让代码很难阅读、理解和维护。看看下面的代码:


1.function doSomething() {  
2.    if ($someCondition) {  
3.        if ($someOtherCondition) {  
4.            if ($yetSomeOtherCondition) {  
5.                doSomethingSpecial();  
6.            }  
7.            doSomethingElse();  
8.        }  
9.    }  
10.}
 


  条件里面又嵌套多个条件,通过转换条件,我们对代码进行了调整:


1.function doSomething() {  
2.    if (!$someCondition) {  
3.        return false;  
4.    }  
5.    if (!$someOtherCondition) {  
6.        return false;  
7.    }  
8.    if ($yetSomeOtherCondition) {  
9.        doSomethingSpecial();  
10.    }  
11.    doSomethingElse();  
12.}
 


  相对于前面的代码,这段代码简洁了很多,并且所实现的功能也是一样的。

  当你在if里面使用嵌套,请仔细检查代码,里面可能同时执行多个方法,例如下面这段代码:


1.function someFunc() {  
2.   if($oneThing) {  
3.      $this->doSomething();  
4.      if($anotherThing)  
5.         $this->doSomethingElse();  
6.   }  
7.}
 


  这种情况下,可以把嵌套代码提取出来:


1.function someFunc() {  
2.   if($oneThing) {  
3.      $this->doSomething();  
4.      $this->doAnotherThing($anotherThing);  
5.   }  
6.}  
7.private doAnotherThing($anotherThing) {  
8.   if($anotherThing)  
9.      $this->doSomethingElse();  
10.}
 


  14、避免使用匿名数字和字符串(Avoid Magic Numbers and Strings)

  使用匿名数字和字符串是有害无益的,在代码里定义需要使用的变量和常量。比如下面这段代码:


1.function someFunct() {  
2.   $this->order->set(23);  
3.   $this->order->addProduct('superComputer');  
4.   $this->shoppingList->add('superComputer');  
5.}
 


  给23和“superComputer”赋予相应意义的变量名:


1.function someFunct() {  
2.   $orderId = 23;  
3.   $selectedProductName = 'superComputer';  
4.   $this->order->set($orderId);  
5.   $this->order->addProduct($selectedProductName);  
6.   $this->shoppingList->add($selectedProductName);  
7.}
 


  可能会有人认为,一些无意义的变量尽量少定义,虽然它们对性能的影响是微不足道的。但可读性永远处于优先地位。请记住:不要随便优化性能,除非你知道为什么。

  15、使用Built-in数组函数

  使用built-in函数来代替foreach()

  差的代码:


1.foreach (&$myArray as $key =>$element) {  
2.   if ($element > 5) unset ($myArray[$key]);  
3.}
 


  改进后的代码:


1.$myArray = array_filter($myArray, function ($element) { return $element <= 5;}); 
 


  PHP里面提供了许多数组方法。起初会混淆,但是试着花时间好好学学它们。