psr規範發展歷程
====================PSR-0(自動加載規範)=======================
PSR-0(Autoloading Standard)類自動加載規範,該規範現已廢棄(Deprecated),它將由PSR-4替代。
1.一個完全合格的命名空間和類名必須遵循以下結構 "\VendorName\Namespace\ClassName"
2.每個命名空間必須有頂級的命名空間 "VendorName"
3.每個命名空間可以有任意多個子命名空間
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-8、UTF-16、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)的實現不能拋出異常,不可引發任一級別錯誤,也不應該有返回值
psr規範發展歷程