轉自:http://www.cnblogs.com/x3d/p/php-psr-standards.html php
是PHP Standard Recommendation的簡寫,它其實應該叫PSRs,即系列推薦標準:目前經過的規範有PSR-0(Autoloading Standard)、PSR-1(Basic Coding Standard)、PSR-2(Coding Style Guide)、PSR-3(Logger Interface)、PSR-4(Improved Autoloading)。它不是PHP官方標準,而是從如Zend、Symfony2等知名PHP項目中提煉出來的一系列標準,目前有越來有多的社區項目加入成員並遵循該標準。html
PHP-FIG — PHP Framework Interoperability Group, 是制定PSRs開發規範的組織,它的成員由不少知名PHP社區項目組成,在其官網首頁下方能夠看到成員清單。這些成員制定規範,而且落實在本身的項目中。git
其實各個PSR規範的內容都很簡潔明瞭,比起那些動則幾十頁的規範,真是好太多了。github
PSR-0即類自動加載規範(原文:官網、GitHub)。從2014-10-21日起,該規範被標記爲Deprecated,由PSR-4替代。它的內容十分簡潔。ide
內容:函數
Vendor Name
>\(<Namespace
>\)*<Class Name
>」Vendor Name
,命名空間,類名能夠由大小寫字母組成,其中命名空間和類名是大小寫敏感的以保證多系統兼容性PSR-1即基礎編碼標準(原文:官網、GitHub)。內榮也十分簡潔,包含了類文件、類名、類方法名的命名方法。ui
內容:編碼
源文件必須只使用 <?php 和 <?= 這兩種標籤spa
源文件中php代碼的編碼格式必須只使用不帶BOM的UTF-8操作系統
一個源文件建議只用來作聲明(類,函數,常量等)或者只用來作一些引發反作用的操做(例如:輸出信息,修改.ini配置文件等),但不該該同時作這兩件事
命名空間和類必須遵照PSR-0標準
類名必須使用StudlyCaps寫法
類中的常量必須只由大寫字母和下劃線(_)組成
方法名必須使用cameCase寫法
PSR-2即編碼風格標準(原文:官網、GitHub)。內容就稍多,但仍是比較簡潔,它以PSR-1爲基礎,包含了縮進、每行代碼長度、換行、方法可見性聲明、空格和方法體大括號換行的相關規定。
標準內容:
代碼必須遵照 PSR-1
代碼必須使用4個空格來進行縮進,而不是用製表符
一行代碼的長度不該有硬限制;軟限制必須爲120個字符,建議每行代碼80個字符或者更少
在命名空間的聲明下面必須有一行空行,而且在use的聲明下面也必須有一行空行
類的左花括號必須放到其聲明下面自成一行,右花括號則必須放到類主體下面自成一行
方法的左花括號必須放到其聲明下面自成一行,右花括號則必須放到方法主體的下一行
全部的屬性和方法必須有可見性聲明;abstract和final聲明必須在可見性聲明以前;而static聲明必須在可見性聲明以後
在結構控制關鍵字的後面必須有一個空格;而方法和函數調用時後面不可有空格
結構控制的左花括號必須跟其放在同一行,右花括號必須放在該結構控制代碼主體的下一行
控制結構的左括號以後不可有空格,右括號以前也不可有空格
PSR-3是對應用日誌類的經過接口的定義(原文:官網、GitHub)。內容很簡單,就是一個接口,官方示例代碼引用一下就行了。固然,在具體的應用中,只要遵循該接口,確定能夠定製相應的實現。
基礎內容:
LoggerInterface暴露八個接口用來記錄八個等級(debug, info, notice, warning, error, critical, alert, emergency)的日誌。
第 九個方法是log,接受日誌等級做爲第一個參數。用一個日誌等級常量來調用這個方法必須和直接調用指定等級方法的結果一致。用一個本規範中未定義且不爲具 體實現所知的日誌等級來調用該方法必須拋出一個Psr\Log\InvalidArgumentException。不推薦使用自定義的日誌等級,除非你 很是肯定當前類庫對其有所支持。
PSR-4即改進版的自動加載規範(原文:官網、GitHub)。它是PSR-0規範的接替者。它能夠與任何其它的自動加載規範兼容,包括PSR-0。
內容:
徹底合規類名必須有一個頂級命名空間(Vendor Name)
徹底合規類名能夠有多個子命名空間
徹底合規類名應該有一個終止類名
下劃線在徹底合規類名中是沒有特殊含義的
字母在徹底合規類名中能夠是任何大小寫的組合
全部類名必須以大小寫敏感的方式引用
在徹底合規類名中,連續的一個或幾個子命名空間構成的命名空間前綴(不包括頂級命名空間的分隔符),至少對應着至少一個基礎目錄
在「命名空間前綴」後的連續子命名空間名稱對應一個「基礎目錄」下的子目錄,其中的命名 空間分隔符表示目錄分隔符。子目錄名稱必須和子命名空間名大小寫匹配
終止類名對應一個以 .php 結尾的文件。文件名必須和終止類名大小寫匹配
自動載入器的實現不可拋出任何異常,不可引起任何等級的錯誤;也不該返回值