PSR 是 php Standard Recommendations 的簡寫,由 PHP FIG 組織制定的 PHP 規范,是 PHP 開發的實踐標準。
目前已表決通過了 6 套標準,已經得到大部分 PHP 框架的支持和認可。
- PSR-1:基礎編碼規范
- PSR-2:編碼風格規范
- PSR-3:日志接口規范
- PSR-4:自動加載規范
- PSR-5:緩存接口規范
- PSR-7:HTTP 消息接口規范
PSR-1 基礎編碼規范
- PHP 代碼文件 必須 以 <?php 或 <?= 標簽開始;
- PHP 代碼文件 必須 以 不帶 BOM 的 UTF-8 編碼;
- PHP 代碼中 應該 只定義類、函數、常量等聲明,或其他會產生 副作用 的操作(如:生成文件輸出以及修改 .ini 配置文件等),二者只能選其一;
- 命名空間以及類 必須 符合 PSR 的自動加載規范:PSR-4 中的一個;
- 類的命名 必須 遵循 StudlyCaps 大寫開頭的駝峰命名規范;
- 類中的常量所有字母都 必須 大寫,單詞間用下劃線分隔;
- 方法名稱 必須 符合 camelCase 式的小寫開頭駝峰命名規范。
PSR-2 編碼風格規范
- 代碼 必須 遵循 PSR-1 中的編碼規范 。
- 代碼 必須 使用 4 個空格符而不是「Tab 鍵」進行縮進。
- 每行的字符數 應該 軟性保持在 80 個之內,理論上 一定不可 多于 120 個,但 一定不可 有硬性限制。
- 每個 namespace 命名空間聲明語句和 use 聲明語句塊后面,必須 插入一個空白行。
- 類的開始花括號({) 必須 寫在類聲明后自成一行,結束花括號(})也 必須 寫在類主體后自成一行。
- 方法的開始花括號({) 必須 寫在函數聲明后自成一行,結束花括號(})也 必須 寫在函數主體后自成一行。
- 類的屬性和方法 必須 添加訪問修飾符(private、protected 以及 public),abstract 以及 final 必須 聲明在訪問修飾符之前,而 static 必須 聲明在訪問修飾符之后。
- 控制結構的關鍵字后 必須 要有一個空格符,而調用方法或函數時則 一定不可 有。
- 控制結構的開始花括號({) 必須 寫在聲明的同一行,而結束花括號(}) 必須 寫在主體后自成一行。
- 控制結構的開始左括號后和結束右括號前,都 一定不可 有空格符。
PSR-3 日志接口規范
- 日志接口提供了8個級別的日志方法包含(debug, info,notice,warning,error,critical,alert,emergency),log方法接受日志級別作為第一個參數
- 每一個方法都接受一個字符串作為一個描述,或者是實現了__toString()方法的類
- 每一個方法都接受一個數組類型的上下文數據
- PsrLogAbstractLogger是實現日志接口的好的方式,PsrLogLoggerTrait僅僅需要實現log方法,PsrLogNullLogger空日志接口,PsrLogLoggerAwareInterface可以wrApper一個logger,PsrLogLogLevel 包含8個日志級別
PSR-4 自動加載規范
- 適用于類、接口、traits和其他相似的結構
- 一個完全限定的類名具備如下結構 NamespaceNameSubNamespaceName*ClassName, 即包含頂級的命名空間 as a vendor namespace ,或許包含一個或者多個子命名空間,必須包含一個類名,下劃線不再具有任何意義,類名大小寫敏感。自動加載不能拋出異常,不報錯,不返回任何值
PSR-7 HTTP 消息接口規范
- 包含PsrHttpMessageRequestInterface和PsrHttpMessageResponseInterface,這兩個接口都是擴展PsrHttpMessageMessageInterface而來
- http頭大小寫不敏感