PHP代码说明

2018-01-13 11:08:16来源:网络收集作者:程序诗人人点击

分享

阿里云爆款
命名问题

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


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();
}
}
参考资料
https://github.com/alivebao/clean-code-js/blob/master/README.md

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台