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写代码应该遵循的规则的主要内容,如果未能解决你的问题,请参考以下文章

编程习惯

代码片段 PHP,预期文件结尾,我错在哪里?

如果“实用程序”类是邪恶的,我应该把我的通用代码放在哪里? [关闭]

PHP大小写问题

Python 编写代码 检查是否遵循PEP 8标准

iOS)我应该在哪里复制和粘贴 facebook XML 片段?