為了便於規範自己的代碼,參考了 CodeIgniter、Laravel、PSR等相關規範,做一個PHP代碼規範的小結。
[TOC] ## 檔案格式
PHP代碼檔案必須以 不帶BOM的 UTF-8編碼。
所有PHP檔案必須使用 Unix LF (linefeed)作為行的結束符。
PHP 結束標籤
所有PHP檔案必須以一個空白行作為結束。
純PHP代碼檔案必須省略最後的 ?>結束標籤。
檔案的命名
類檔案的命名必須以大寫字母開頭,其他檔案(設定檔,視圖,一般的指令檔等)的命名是全小寫。另外,類檔案的名稱必須和類的名稱保持一致。
命名空間和類的命名
- CI架構:類名必須以大寫字母開頭,多個單詞之間使用底線分割,不要使用駝峰命名法。
- RSP-1:類的命名必須 遵循 StudlyCaps大寫開頭的駝峰命名規範。
方法的命名
- CI架構:類的方法應該使用全小寫,並且應該明確指出該方法的功能,最好包含一個動詞。 避免使用冗長的名稱,多個單詞之間使用底線分割。
- RSP-1:方法名稱必須符合 camelCase() 式的小寫開頭駝峰命名規範。
屬性的命名
- CI架構:變數的命名規則和類方法的命名規則非常接近,使用全小寫,使用底線分割, 並且應該明確指出該變數的用途。非常短的無意義的變數只應該在 for 迴圈中作為迭代器使用。
- RSP-1:類的屬性命名可以遵循 大寫開頭的駝峰式 ( $StudlyCaps)、小寫開頭的駝峰式 ( $camelCase) 又或者是 底線分隔式 ( $under_score),本規範不做強制要求,但無論遵循哪種命名方式,都應該在一定的範圍內保持一致。這個範圍可以是整個團隊、整個包、整個類或整個方法。
注釋
通常情況下,應該多寫點注釋,這不僅可以向那些缺乏經驗的程式員描述代碼的流程和意圖, 而且當你幾個月後再回過頭來看自己的代碼時仍能幫你很好的理解。 注釋並沒有強制規定的格式,但是我們建議以下的形式。
DocBlock風格的注釋,寫在類、方法和屬性定義的前面,可以被 IDE 識別:
/** * Super Class * * @package Package Name * @subpackage Subpackage * @category Category * @author Author Name * @link http://example.com */class Super_class {
/** * Encodes string for use in XML * * @param string $str Input string * @return string */function xml_encode($str)
/** * Data for class manipulation * * @var array */public $data = array();
單行注釋應該和代碼合在一起,大塊的注釋和代碼之間應該留一個空行。
// break up the string by newlines$parts = explode("\n", $str);// A longer comment that needs to give greater detail on what is// occurring and why can use multiple single-line comments. Try to// keep the width reasonable, around 70 characters is the easiest to// read. Don't hesitate to link to permanent external resources// that may provide greater detail://// http://example.com/information_about_something/in_particular/$parts = $this->foo($parts);
常量
類的常量中所有字母都必須大寫,詞間以底線分隔。 參照以下代碼:
PHP所有 關鍵字必須全部小寫。
常量 true、 false和 null也必須全部小寫。
邏輯操作符
不要使用 ||操作符,它在一些裝置上看不清(可能看起來像是數字 11), 使用 &&操作符比使用 AND要好一點,但是兩者都可以接受。 另外,在 !操作符的前後都應該加一個空格。
對傳回值進行比較以及類型轉換
有一些 PHP 函數在失敗時返回 FALSE ,但是也可能會返回 "" 或 0 這樣的有效值, 這些值在鬆散類型比較時和 FALSE 是相等的。所以當你在條件中使用這些傳回值作比較時, 一定要使用嚴格類型比較,確保傳回值確實是你想要的,而不是鬆散類型的其他值。
在檢查你自己的傳回值和變數時也要遵循這種嚴格的方式,必要時使用 === 和 !== 。
檔案中的空格
PHP 起始標籤的前面和結束標籤的後面都不要留空格。
一個類一個檔案
除非幾個類是 緊密相關的,否則每個類應該單獨使用一個檔案。
空格
- CI架構:在代碼中使用定位字元(tab)來代替空格,這雖然看起來是一件小事,但是使用定位字元代替空格, 可以讓開發人員閱讀你代碼的時候,可以根據他們的喜好在他們的程式中自訂縮排。 此外還有一個好處是,這樣檔案可以更緊湊一點,也就是本來是四個空白字元, 現在只要一個定位字元就可以了。
- PSR-2:代碼必須使用4個空格符而不是 tab鍵 進行縮排。
- 縮排使用定位字元,對齊使用空格。
代碼縮排
函數和控制結構必須使用 Allman 樣式括起來
字串
字串使用單引號引起來,當字串中有變數時使用雙引號,並且使用大括弧將變數包起來。 另外,當字串中有單引號時,也應該使用雙引號,這樣就不用使用轉義符。
'My String'"My string {$foo}""SELECT foo FROM bar WHERE baz = 'bag'"