PHP PSR 代碼規範基本介紹

PSR 是 PHP Standard Recommendation 的簡寫,即PHP推薦標準。php

目前經過的規範有 PSR-0(Autoloading Standard)、PSR-1(Basic Coding Standard)、PSR-2(Coding Style Guide)、PSR-3(Logger Interface)、PSR-4(Improved Autoloading)。框架

PSR 不是PHP官方標準,而是從如Zend、Symfony2等知名PHP項目中提煉出來的一系列標準,目前有愈來愈多的社區項目加入並遵循該標準。ide

PHP FIG(Framework Interoperability Group)框架可互用性小組是制定PSR開發規範的組織。他們的目的在於以最低程度的限制制定一個統一的標準,讓各個框架遵循統一的編碼規範。函數

 

====================PSR-0(自動加載規範)=======================ui

PSR-0(Autoloading Standard)類自動加載規範,該規範現已廢棄(Deprecated),它將由PSR-4替代。編碼

1.一個徹底合格的命名空間和類名必須遵循如下結構 "\VendorName\Namespace\ClassName"spa

2.每一個命名空間必須有頂級的命名空間 "VendorName"操作系統

3.每一個命名空間能夠有任意多個子命名空間debug

4.每一個命名空間在被文件系統加載時必須被轉換爲操做系統路徑分隔符 (DIRECTORY_SEPARATOR)日誌

5.每一個"_"字符在"類名"中被轉換爲DIRECTORY_SEPARATOR。而在 PSR-4 中使用下劃線沒有任何特殊含義

6.符合命名標準的命名空間和類名必須以".php"結尾來加載文件

7.命名空間和類名能夠由大小寫字母組成,但必須對大小寫敏感以保證多系統兼容性

 

====================PSR-1(基本代碼規範)=======================

PSR-1(Basic Coding Standard)基本代碼規範,用以確保共享的PHP代碼間具備較高程度的技術互通性。

1.PHP代碼源文件必須以 <?php 或 <?= 標籤開始

2.PHP代碼源文件必須使用不帶 BOM 的 UTF-8 編碼

3.一個源文件建議只用做定義類、函數、常量等聲明,或者其餘產生從屬效應的操做(如:輸出信息,修改配置文件等)

4.命名空間以及類必須符合 PSR 的自動加載規範:PSR-0 或 PSR-4

5.類的命名必須遵循 StudlyCaps 大寫開頭的駝峯式命名規範

6.類中的常量全部字母都必須大寫,單詞間用下劃線分隔

7.方法名必須符合 camelCase 式的小寫開頭駝峯式命名規範

 

* BOM(byte order mark)是 Unicode 標準的一部分,一般用於標記純文本字節序(byte order),使得文本處理程序可以識別讀入的文件使用的 Unicode 編碼(UTF-八、UTF-1六、UTF-32)。

* 從屬效應是指僅僅經過包含文件,不直接聲明類、函數和常量而執行的邏輯操做。一份PHP源文件應該要麼就只包含不產生從屬效應的定義操做,要麼就包含只會產生從屬效應的邏輯操做,切勿同時包含二者。

 

====================PSR-2(代碼風格規範)=======================

 PSR-2(Coding Style Guide)代碼風格規範,經過制定一系列規範化PHP代碼的規則,以減小因代做者碼風格不一樣而形成的閱讀不便。

1.代碼必須遵循 PSR-1 中的編碼規範

2.代碼必須使用4個空格來進行縮進,而非製表符(TAB)

3.建議每行代碼字符數保持在80個之內,理論上不可多於120個,但不作硬性限制

4.每一個 namespace 命名空間語句和 use 聲明語句塊後面必須插入一個空白行

5.類的左花括號 "{" 必須寫在聲明後自成一行,右花括號 "}" 也必須在類主體下自成一行

6.方法的左花括號 "{" 必須放在聲明後自成一行,右花括號 "}" 也必須於主體下自成一行

7.類的屬性和方法必須添加訪問修飾符(private、protected、public),abstract 以及 final 必須聲明在訪問修飾符以前,而 static 必須聲明在訪問修飾符以後(例:final public static)

8.在控制結構關鍵字的後面必須有一個空格,而調用方法或函數時必定不能有(控制結構:if-else、switch-case、try-catch、while、foreach ...)

9.控制結構的左花括號 "{" 必須跟其處於同一行,右花括號 "}" 必須在控制結構主體以後自成一行

10.控制結構的開始左括號以後,和結束右括號以前都不能夠有空格

 

====================PSR-3(日誌接口規範)=======================

PSR-3(Logger Interface)日誌接口規範,主要目的是爲了讓日誌類庫經過接收一個 LoggerInterface 對象來記錄日誌信息。

1.LoggerInterface 接口對外定義了八個方法,分別用來記錄 RFC 5424 中定義的八個等級的日誌:debug、info、notice、warning、error、critical、alert、emergency

2.第九個方法 log(),第一個參數爲記錄等級。可以使用一個預先定義的等級常量做爲參數來調用此方法,必須與直接調用以上八個方法具備相同的效果。若是傳入的等級常量沒有預先定義,則必須拋出 psr\Log\InvalidArgumentException 類型的異常。不推薦使用自定義的日誌等級,除非你很是肯定當前類庫對其有所支持。

 

 ====================PSR-4(自動加載新規)=======================

PSR-4(Improved Autoloading)本規範是關於自動載入對應類的相關規範,是 PSR-0 自動加載規範的補充。

1.此處的「類」是一個泛稱,它包含類、接口、traits 以及其餘相似的結構

2.徹底限定類名須要遵循如下結構:\<命名空間>(\<子命名空間>)*\<類名>

  * 徹底限定類名必需要有一個頂級命名空間,被稱爲 "vendor namespace";

  * 徹底限定類名能夠有一個或多個子命名空間;

  * 徹底限定類名必須有一個終止類名;

  * 徹底限定類名中任意一部分中的下劃線都沒有特殊含義;

  * 徹底限定類名能夠由任意大小寫字母組成;

  * 徹底限定類名必須以大小寫敏感的方式引用;

3.當根據完整的類名載入相應的文件時:

  * 徹底限定類名中,連續的一個或幾個子命名空間構成的命名空間前綴(不包括頂級命名空間的分隔符),至少對應着至少一個基礎目錄;

  * 緊接命名空間前綴後的子命名空間必須與相應的」文件基目錄「相匹配,其中的命名空間分隔符將做爲目錄分隔符;

  * 終止類名對應一個以 .php 結尾的文件,文件名必須和終止類名大小寫匹配;

4.自動加載器(autoloader)的實現不能拋出異常,不可引起任一級別錯誤,也不該該有返回值

相關文章
相關標籤/搜索