PHP代码说明

命名问题

一、有意义且可拼写的变量名

Bad:
$ymdstr = date('Y-m-d');
Good:
$currentDate = date('Y-m-d');
PS:
$arr //数组
$t //单字母的
$param //全局参数  避免被覆盖

二、同种类型的变量使用相同词汇

Bad:
getUserInfo();
getClientData();
getCustomerRecord();
Good:
getUser();
PS:
要保证所有地方用到的文字说明是一样。 

比如:商品 item / goods

三、使用易检索的名称
我们会读比写要多的代码。通过是命名易搜索,让我们写出可读性和易搜索代码很重要。

Bad:
//addExpireAt(86400);
Good:
// Declare them as capitalized `const` globals.
interface DateGlobal {  
  const SECONDS_IN_A_DAY = 86400;
 }

 addExpireAt(DateGlobal::SECONDS_IN_A_DAY);

PS:
状态的切换:
state 0,1,2
优点:
统一统计,方面修改,不要写的到处都是。

四、使用解释型变量

Bad
$address = 'One Infinite Loop, Cupertino 95014';
$cityZipCodeRegex = '/^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/';
preg_match($cityZipCodeRegex, $address, $matches);
saveCityZipCode($matches[1], $matches[2]);

Good:
$address = 'One Infinite Loop, Cupertino 95014';
$cityZipCodeRegex = '/^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/';
preg_match($cityZipCodeRegex, $address, $matches);
list(, $city, $zipCode) = $matchers;
saveCityZipCode($city, $zipCode);

五、不要添加不必要上下文

如果你的class/object 名能告诉你什么,不要把它重复在你变量名里。
class Car{
    function getCarColor()
    {
        // sth
    }
}

class Car{
    function getColor()
    {
        // sth
    }
}

函数

一个函数只做一件事

一、函数参数最好少于2个
限制函数参数个数极其重要因为它是你函数测试容易点。有超过3个可选参数参数导致一个爆炸式组合增长,你会有成吨独立参数情形要测试。
无参数是理想情况。1个或2个都可以,最好避免3个。再多旧需要加固了。通常如果你的函数有超过两个参数,说明他多做了一些事。 在参数少的情况里,大多数时候一个高级别对象(数组)作为参数就足够应付。

Bad:
function createMenu($title, $body, $buttonText, $cancellable) {  
  // ...
}
Good:
class menuConfig() {  
  public $title;  
  public $body;  
  public $buttonText;  
  public $cancellable = false;
}

$config = new MenuConfig();
$config->title = 'Foo';
$config->body = 'Bar';
$config->buttonText = 'Baz';
$config->cancellable = true;
function createMenu(MenuConfig $config) {  
  // ...
}

二、不要用标志作为函数的参数,标志告诉你的用户函数做很多事了。函数应当只做一件事。 根据布尔值区别的路径来拆分你的复杂函数。

Bad:
function createFile(name, temp = false) {  
  if (temp) {    
    touch('./temp/'.$name);  
  } else {    
    touch($name);  
  }
}
Good:
function createFile($name) {  
  touch(name);
}

function createTempFile($name) {  
  touch('./temp/'.$name);
}

三、封装条件语句

Bad:
if ($fsm->state === 'fetching' && is_empty($listNode)) {  
   // ...
}
Good:
function shouldShowSpinner($fsm, $listNode) {  
  return $fsm->state === 'fetching' && is_empty(listNode);
}

if (shouldShowSpinner($fsmInstance, $listNodeInstance)) {  
  // ...
}
PS:尤其是判断条件较多的时候

四、避免条件声明

Bad:
class Airplane {  
  // ...  
  public function getCruisingAltitude() {    
    switch (this.type) {      
      case '777':        
        return $this->getMaxAltitude() - $this->getPassengerCount();      
      case 'Air Force One':        、
        return $this->getMaxAltitude();      
      case 'Cessna':        
        return $this->getMaxAltitude() - $this->getFuelExpenditure();   
      }     
    }
  }
Good:
class Airplane {  
  // ...
}

class Boeing777 extends Airplane {  
  // ...  
  public function getCruisingAltitude() {    
    return $this->getMaxAltitude() - $this->getPassengerCount();
  }
}

  class AirForceOne extends Airplane {  
      // ...  
      public function getCruisingAltitude() {    
        return $this->getMaxAltitude();  
      }
  }
   class Cessna extends Airplane {  
      // ...  
      public function getCruisingAltitude() {    
           return $this->getMaxAltitude() - $this->getFuelExpenditure();  
     }
 }

参考资料

  1. https://github.com/alivebao/clean-code-js/blob/master/README.md
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值