首頁  >  文章  >  php教程  >  PHP的PSR系列規範

PHP的PSR系列規範

不言
不言原創
2018-05-23 14:58:412430瀏覽

PSR

是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項目中提煉出來的一系列標準,目前有越來有多的社區項目加入成員並遵循該標準。

PHP-FIG — PHP Framework Interoperability Group, 是製定PSRs開發規範的組織,它的成員由許多知名PHP社群專案組成,在其官網首頁下方可以看到成員清單。這些成員制定規範,並且落實在自己的專案中。

其實各個PSR規範的內容都很簡潔明了,比起那些動則幾十頁的規範,真是好太多了。

PSR-0(Autoloading Standard)

PSR-0即類自動載入規格(原文:官網、GitHub)。從2014-10-21日起,該規範被標記為Deprecated,由PSR-4取代。它的內容十分簡潔。

內容:

一個完全合格的命名空間和類別名稱必須有以下的結構“()*

每個命名空間必須有頂級的命名空間(“ Vendor Name」)

每個命名空間可以有任意多個子命名空間

每個命名空間在被從檔案系統載入時必須轉換為「作業系統路徑分隔符號」(DIRECTORY_SEPARATOR )

每個「_ 」字元在「類別名稱」中轉換為DIRECTORY_SEPARATOR 。 「_」符號在命名空間中沒有明確意義

符合命名標準的命名空間和類別名稱必須以「.php」結尾來載入檔案

Vendor Name,命名空間,類別名稱可以由大小寫字母組成,其中命名空間和類別名稱是大小寫敏感的以保證多系統相容性

PSR-1(Basic Coding Standard)

PSR-1即基礎編碼標準(原文:官網、GitHub)。內榮也十分簡潔,包含了類別檔案、類別名稱、類別方法名稱的命名方法。

內容:

原始檔案必須只使用 

原始檔案中php程式碼的編碼格式必須只使用不帶BOM的UTF-8

一個原始檔案建議只用來做聲明(類,函數,常量等)或只用來做一些引起副作用的操作(例如:輸出信息,修改.ini配置文件等),但不應該同時做這兩件事

命名空間和類必須遵守PSR-0標準

類別名稱必須使用StudlyCaps寫法

類別中的常數必須只由大寫字母和底線(_)組成

方法名稱必須使用cameCase寫法

PS

PSR-2即編碼風格標準(原文:官網、GitHub)。內容就稍多,但還是比較簡潔,它以PSR-1為基礎,包含了縮排、每行程式碼長度、換行、方法可見性宣告、空格和方法體大括號換行的相關規定。

標準內容:

程式碼必須遵守 PSR-1

程式碼必須使用4個空格來進行縮排,而不是用製表符

一行程式碼的長度不應有硬限制;軟限制必須為120個限制字符,建議每行代碼80個字符或更少

在命名空間的聲明下面必須有一行空行,並且在use的聲明下面也必須有一行空行

類的左花括號必須放到其聲明下面自成一行,右花括號則必須放到類別主體下面自成一行

方法的左花括號必須放到其聲明下面自成一行,右花括號則必須放到方法主體的下一行

所有的屬性和方法必須有可見性宣告;abstract和final聲明必須在可見性宣告之前;而static宣告必須在​​可見性宣告之後

在結構控制關鍵字的後面必須有一個空格;而方法和函式呼叫時後面不可有空格

結構控制的左花括號必須跟其放在同一行,右花括號必須放在該結構控製程式碼主體的下一行

控制結構的左括號之後不可有空格,右括號之前也不可有空格

PSR-3(Logger Interface)

PSR-3是應用程式日誌類別的透過介面的定義(原文:官網、GitHub)。內容很簡單,就是一個接口,官方範例程式碼引用一下就好了。當然,在具體的應用中,只要遵循該接口,肯定可以定制相應的實現。

基礎內容:

LoggerInterface暴露八個介面用來記錄八個等級(debug, info, notice, warning, error, critical, alert, emergency)的日誌。

第 九個方法是log,接受日誌等級作為第一個參數。用一個日誌等級常數來呼叫這個方法必須和直接呼叫指定等級方法的結果一致。用一個本規範中未定義且不為具 體實作所知的日誌等級來呼叫該方法必須拋出一個PsrLogInvalidArgumentException。不建議使用自訂的日誌等級,除非你 非常確定目前類別庫對其有所支援。

PSR-4(Improved Autoloading)

PSR-4即改進版的自動載入規格(原文:官網、GitHub)。它是PSR-0規範的接替者。它可以與任何其它的自動加載規範相容,包括PSR-0。

內容:

術語「類」是一個泛稱;它包含類,接口,traits 以及其他類似的結構;

完全限定類名應該類似如下範例:()*

完全合規類別名稱必須有一個頂層命名空間(Vendor Name)

完全合規類別名稱可以有一個頂層命名空間

完全合規類別名稱應該有一個終止類別名稱

下劃線在完全合規類別名稱中是沒有特殊意義的

字母在完全合規類別名稱中可以是任何大小寫的組合

所有類別名稱必須以大小寫敏感的方式引用

當從完全合規類別名稱載入檔案時:

在完全合規類別名稱中,連續的一個或幾個子命名空間構成的命名空間前綴(不包括頂級命名空間的分隔符),至少對應著至少一個基礎目錄

在「命名空間前綴」後的連續子命名空間名稱對應一個「基礎目錄」下的子目錄,其中的命名空間分隔符號表示目錄分隔符號。子目錄名稱必須和子命名空間名稱大小寫匹配

終止類別名稱對應一個以 .php 結尾的檔案。檔案名稱必須和終止類別名稱大小寫匹配

自動載入器的實作不可拋出任何異常,不可引發任何等級的錯誤;也不應回傳值

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn