PHP編碼風格規範詳細介紹

2020-07-16 10:05:39

  由於PHP的靈活性,很多人寫起程式碼來也不講求一個好的程式碼規範,使得本就靈活的PHP程式碼看起來很亂,其實PSR規範中的PSR-1和PSR-2已經定義了在PHP編碼中的一些規範,只要我們好好遵守這些規範,即使是使用靈活的指令碼語言,也能寫出非常漂亮工整的程式碼。首先我們來看一下已經通過的PSR規範,然後大致講解一下PSR-1和PSR-2規範的一些具體要求。

已通過的PSR

PSR編號名稱說明
1基礎編碼規範關於PHP標籤和基本命名約定等基礎的規範
2編碼風格規範關於大括號的位置和參數列等編碼格式的規定
3紀錄檔介面規範關於紀錄檔級別以及記錄紀錄檔的行為的規定
4自動載入規範關於類和名稱空間的命名約定,以及它們與檔案系統間對映的規定
6快取介面規範關於快取管理的規定,其中包括資料型別、快取項的生存週期、錯誤處理等
7HTTP訊息介面規範關於HTTP請求和響應的約定

PSR-1基礎編碼規範

1、開閉標籤

  首先,PHP程式碼必須以<?php或<?=標籤開始。換言之,我們不應該再使用短標籤<?或其它變化形式。

2、副作用

  PHP檔案要麼宣告類、介面、函數等,要麼執行邏輯操作(如讀寫檔案或向瀏覽器傳送輸出),但不應該同時兼具兩者。

3、命名

  類的命名必須遵守大寫開頭的駝峰式命名規範。換言之,類名應當以大寫字母開頭。屬性的命名方式沒有強制要求,但應該保持一致。方法名稱必須符合小寫開頭的駝峰式命名規範。類常數中的所有字母必須大寫,單詞之間以下劃線分隔。

PSR-2編碼風格規範

1、PSR-1要求PHP程式碼以<?php開頭。

  PSR-2規定,純PHP檔案不應該以一個?>標籤結束,而應該以一個空白行結束。

2、namespace宣告後應該插入一個空白行,use宣告語句塊後也應該要有一個空白行

  不要在同一行程式碼中進行多次use宣告。

3、類的開始和結束

  class關鍵字、類名,以及extends和implements關鍵字必須在同一行中。如果一個類實現了多個介面,那麼這些介面名可以在類宣告的同一行中,也可以各佔一行。如果選擇將這些介面名放在多行中,那麼第一個介面名必須自成一行,而不是跟在implements關鍵字後面。類的開始花括號({)應該寫在函數宣告後自成一行,結束花括號(})也應該寫在類體後自成一行。也就是說,類宣告看起來如下所示

class EarthGame extends Game implements
    Playable,    
    Savable
{ 
       //類體
}

  也可以將類名與類宣告放在同一行中。

class EarthGame extends Game implements Playble, Savable
{ 
    //類體
 }

4、屬性宣告

  每個屬性都必須有存取修飾符(public、private或protected)。不可以使用關鍵字var宣告屬性。PSR-1中已經涵蓋了屬性名的規範:可以使用下劃線、小寫駝峰式命名或大寫駝峰式命名方式,但應該保持一致。(個人推薦屬性採用小寫式駝峰)

5、方法的開始和結束

  所有方法必須具有存取修飾符(public、private或protected)。存取修飾符必須在abstract或final之後,static之前。具有預設值得方法引數應該放在參數列的末尾。

  ●單行宣告
    方法的開始花括號({)應該寫在方法名後自成一行,結束花括號(})也應該寫在方法體後自成一行(直接跟在方法程式碼之後)。方法參數列不應該以空格開始或結束(即應該緊貼包裹著它們的圓括號)。對於每個引數,引數名(或預設值)後面應該有一個逗號,且逗號後面有一個空格。這聽起來似乎有些複雜,如下所示:

final public static function generateTile(int $diamondCount, bool $polluted = false)
{
   //方法體
}

  ●多行宣告
    如果方法有很多引數,那麼單行方法宣告是不實際的。此時我們可以分割參數列,以便將每個引數(包括型別、引數變數、預設值和逗號)單獨放在縮排的一行中。這種情況下,結束圓括號應該放在參數列後面一行中,並與方法宣告的開始位置對齊。開始花括號({)應該在同一行的結束圓括號之後,以空格分隔。方法體應該從新的一行開始。同樣,這聽起來似乎很複雜,以下範例應該能幫助你理解這條規定。

public function __construct(
    int $size,
    string $name,
    bool $warparound = false,
    bool $aliens = false
) {
  //方法體
 }

6、行與縮排

  程式碼應該使用4個空格符來縮排,而不是使用製表符。我們可以檢查編輯器設定,將其設定為按下Tab鍵時使用4個空格而不是製表符。每行程式碼的長度不應該超過120個字元。

7、方法與函數呼叫

  方法名稱和開始圓括號之間不能有空格。方法呼叫中的參數列的規則與方法宣告中的參數列規則相同。換言之,對於單行呼叫,開始圓括號後或結束圓括號前不能有空格。每個引數之後應該緊跟一個逗號,下一個引數前應該有一個空格。如果需要使用多行程式碼進行方法呼叫,那麼每個引數應該自成一行並縮排,而且結束圓括號也應該自成一行。

$earthGanme = new EarthGame( 
     5,  
     'earth',
      true,
      true
 );
$earthGame::generateTile(5, true);

8、流程控制

  流程控制關鍵字(if、for、while等)後面必須緊跟一個空格。但是,開始圓括號後不能有空格。同樣,結束圓括號前不能有空格。因此內容應該緊貼在括號內的。與類和(單行)函數宣告相比,流程控制程式碼的開始花括號應該與結束圓括號在同一行。結束花括號應該自成一行。以下是一個簡單的範例。

$title = [];
for ($x = 0; $x < $diamondCount; $x++) { 
   if ($polluted) {
        $title[] = new PollutionDecorator(new DiamondDecorator(new Plains()));
    } else {
        $title[] = new DiamondDecorator(new Plains());
    }
}

以上就是PHP編碼風格規範詳細介紹的詳細內容,更多請關注TW511.COM其它相關文章!