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


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替代。它的內容十分簡潔。

內容:

  1. 一個完全合格的命名空間和類名必須有以下的結構“\<Vendor Name>\(<Namespace>\)*<Class Name>”
  2. 每個命名空間必須有頂級的命名空間(“Vendor Name”)
  3. 每個命名空間可以有任意多個子命名空間
  4. 每個命名空間在被從文件系統加載時必須被轉換為“操作系統路徑分隔符”(DIRECTORY_SEPARATOR )
  5. 每個“_”字符在“類名”中被轉換為DIRECTORY_SEPARATOR 。“_”符號在命名空間中沒有明確含義
  6. 符合命名標准的命名空間和類名必須以“.php”結尾來加載文件
  7. Vendor Name,命名空間,類名可以由大小寫字母組成,其中命名空間和類名是大小寫敏感的以保證多系統兼容性

PSR-1(Basic Coding Standard)

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

內容:

  1. 源文件必須只使用 <?php 和 <?= 這兩種標簽

  2. 源文件中php代碼的編碼格式必須只使用不帶BOM的UTF-8

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

  4. 命名空間和類必須遵守PSR-0標准

  5. 類名必須使用StudlyCaps寫法

  6. 類中的常量必須只由大寫字母和下划線(_)組成

  7. 方法名必須使用cameCase寫法

PSR-2(Coding Style Guide)

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

標准內容:

  1. 代碼必須遵守 PSR-1

  2. 代碼必須使用4個空格來進行縮進,而不是用制表符

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

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

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

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

  7. 所有的屬性和方法必須有可見性聲明;abstract和final聲明必須在可見性聲明之前;而static聲明必須在可見性聲明之后

  8. 在結構控制關鍵字的后面必須有一個空格;而方法和函數調用時后面不可有空格

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

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

PSR-3(Logger Interface)

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

基礎內容:

  1. LoggerInterface暴露八個接口用來記錄八個等級(debug, info, notice, warning, error, critical, alert, emergency)的日志。

  2. 第 九個方法是log,接受日志等級作為第一個參數。用一個日志等級常量來調用這個方法必須和直接調用指定等級方法的結果一致。用一個本規范中未定義且不為具 體實現所知的日志等級來調用該方法必須拋出一個Psr\Log\InvalidArgumentException。不推薦使用自定義的日志等級,除非你 非常確定當前類庫對其有所支持。

 

PSR-4(Improved Autoloading)

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

內容:

  1. 術語「類」是一個泛稱;它包含類,接口,traits 以及其他類似的結構;
  2. 完全限定類名應該類似如下范例:<NamespaceName>(<SubNamespaceNames>)*<ClassName>
    1. 完全合規類名必須有一個頂級命名空間(Vendor Name)

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

    3. 完全合規類名應該有一個終止類名

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

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

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

  3. 當從完全合規類名載入文件時:
    1. 在完全合規類名中,連續的一個或幾個子命名空間構成的命名空間前綴(不包括頂級命名空間的分隔符),至少對應着至少一個基礎目錄

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

    3. 終止類名對應一個以 .php 結尾的文件。文件名必須和終止類名大小寫匹配

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

注:具體規范內容參考了其他中文翻譯版本整理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM