PHP的PSR系列規範都有啥內容

2021-09-22 13:36:41 字數 2804 閱讀 7893

是php standard recommendation的簡寫,它其實應該叫psrs,即系列推薦標準:目前通過的規範有psr-0(autoloading standard)、psr-1(basic coding standard)、psr-2(coding style guide)、psr-3(logger inte***ce)、psr-4(improved autoloading)。它不是php官方標準,而是從如zend、symfony2等知名php專案中提煉出來的一系列標準,目前有越來有多的社群專案加入成員並遵循該標準。

php-fig — php framework interoperability group, 是制定psrs開發規範的組織,它的成員由很多知名php社群專案組成,在其官網首頁下方可以看到成員清單。這些成員制定規範,並且落實在自己的專案中。

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

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

內容:乙個完全合格的命名空間和類名必須有以下的結構「\<vendor name>\(<namespace>\)*<class name>」

每個命名空間必須有頂級的命名空間(「vendor name」)

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

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

每個「_」字元在「類名」中被轉換為directory_separator 。「_」符號在命名空間中沒有明確含義

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

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

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

內容:原始檔必須只使用 <?php 和 <?= 這兩種標籤

原始檔中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)。內容很簡單,就是乙個介面,官方示例**引用一下就好了。當然,在具體的應用中,只要遵循該介面,肯定可以定製相應的實現。

基礎內容:

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

第 九個方法是log,接受日誌等級作為第乙個引數。用乙個日誌等級常量來呼叫這個方法必須和直接呼叫指定等級方法的結果一致。用乙個本規範中未定義且不為具 體實現所知的日誌等級來呼叫該方法必須丟擲乙個psr\log\invalidargumentexception。不推薦使用自定義的日誌等級,除非你 非常確定當前類庫對其有所支援。

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

內容:術語「類」是乙個泛稱;它包含類,介面,traits 以及其他類似的結構;

完全限定類名應該類似如下範例:()*完全合規類名必須有乙個頂級命名空間(vendor name)

完全合規類名可以有多個子命名空間

完全合規類名應該有乙個終止類名

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

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

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

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

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

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

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

自動載入器的實現不可丟擲任何異常,不可引發任何等級的錯誤;也不應返回值

符合PSR的PHP程式設計規範例項

好的 書寫習慣可以讓人賞心悅目 namespace standard 頂部命名空間 空一行 use test testclass use引入類 類描述 類名必須大寫開頭駝峰.abstract class standardexample 必須換行 必須換行 this nametest new test...

PHP規範PSR0和PSR4的理解

下文描述了若要使用乙個通用的自動載入器 autoloader 你所需要遵守的規範 參考 以下,列出psr0構建的規範類的幾種形式 這個 psr 描述的是通過檔案路徑 自動載入 類的指南 它作為對 psr 0 的補充 根據這個 指導如何規範存放檔案來自動載入 術語 類 是乙個泛稱 它包含類,介面,tr...

PHP規範PSR0和PSR4的理解

下文描述了若要使用乙個通用的自動載入器 autoloader 你所需要遵守的規範 參考 以下,列出psr0構建的規範類的幾種形式 這個 psr 描述的是通過檔案路徑 自動載入 類的指南 它作為對 psr 0 的補充 根據這個 指導如何規範存放檔案來自動載入 術語 類 是乙個泛稱 它包含類,介面,tr...