1. 程式人生 > >php寫代碼應該遵循的規則

php寫代碼應該遵循的規則

修改 拋出異常 cred email 封裝 state 只為 users strtol

引用於: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寫代碼應該遵循的規則