php写代码应该遵循的规则
Posted lvchengda
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php写代码应该遵循的规则相关的知识,希望对你有一定的参考价值。
引用于:https://zhuanlan.zhihu.com/p/33451652,感谢summer大神
1,使用有意义的且可读的变量名(一定要明确变量名的意义)
eg:$currentDate
2,使用可搜索的名称
eg:在类中定义常量
3,避免嵌套太深和提前返回
错误:
1 function isShopOpen($day): bool 2 { 3 if ($day) { 4 if (is_string($day)) { 5 $day = strtolower($day); 6 if ($day === ‘friday‘) { 7 return true; 8 } elseif ($day === ‘saturday‘) { 9 return true; 10 } elseif ($day === ‘sunday‘) { 11 return true; 12 } else { 13 return false; 14 } 15 } else { 16 return false; 17 } 18 } else { 19 return false; 20 } 21 }
正确:(错误的可以抛出异常)
function isShopOpen(string $day): bool { if (empty($day)) { return false; } $openingDays = [ ‘friday‘, ‘saturday‘, ‘sunday‘ ]; return in_array(strtolower($day), $openingDays, true); }
4,一定要定义好函数变量的类型(不要条件判断)
eg:public function send(string $email,string $userName){}
5,条件判断使用全等符==
6,函数参数应该少于两个参数,实在超过三个的,封装一个对象
eg:public function send(User $user){}
7,函数应该只做一件事
8,函数的名称要说清楚它做什么
9,不要用boolean类型的变量作为函数的参数
不友好的:
1 function createFile(string $name, bool $temp = false): void 2 { 3 if ($temp) { 4 touch(‘./temp/‘.$name); 5 } else { 6 touch($name); 7 } 8 }
友好的:
1 function createFile(string $name): void 2 { 3 touch($name); 4 } 5 6 function createTempFile(string $name): void 7 { 8 touch(‘./temp/‘.$name); 9 }
注:这样也符合函数只干一件事
10,尽量不要定义全局函数
11,封装条件语句
不友好的:
if ($article->state === ‘published‘) {
// ...
}
友好的:
if ($article->isPublished()) {
// ...
}
12,避免用反义条件判断
eg:if (!isDOMNodeNotPresent($node))
13,移除无用代码
14,使用protected和private描述类中的变量
15,职责单一原则
eg:正如 Clean Code 书中所述,"修改一个类应该只为一个理由"。人们总是容易去用一堆方法 "塞满" 一个类,就好像当我们坐飞机上只能携带一个行李箱时,会把所有的东西都塞到这个箱子里。这样做带来的后果是:从逻辑上讲,这样的类不是高内聚的,并且留下了很多以后去修改它的理由。
将你需要修改类的次数降低到最小很重要,这是因为,当类中有很多方法时,修改某一处,你很难知晓在整个代码库中有哪些依赖于此的模块会被影响。
比较糟:
1 class UserSettings 2 { 3 private $user; 4 5 public function __construct(User $user) 6 { 7 $this->user = $user; 8 } 9 10 public function changeSettings(array $settings): void 11 { 12 if ($this->verifyCredentials()) { 13 // ... 14 } 15 } 16 17 private function verifyCredentials(): bool 18 { 19 // ... 20 } 21 }
棒棒哒:
1 class UserAuth 2 { 3 private $user; 4 5 public function __construct(User $user) 6 { 7 $this->user = $user; 8 } 9 10 public function verifyCredentials(): bool 11 { 12 // ... 13 } 14 } 15 16 class UserSettings 17 { 18 private $user; 19 private $auth; 20 21 public function __construct(User $user) 22 { 23 $this->user = $user; 24 $this->auth = new UserAuth($user); 25 } 26 27 public function changeSettings(array $settings): void 28 { 29 if ($this->auth->verifyCredentials()) { 30 // ... 31 } 32 } 33 }
16,避免写重复代码
以上是关于php写代码应该遵循的规则的主要内容,如果未能解决你的问题,请参考以下文章