PHP 規範之PSR規範

概述

PSR 不是PHP官方標準,而是從如Zend、Symfony2等知名PHP項目中提煉出來的一系列標準,目前有愈來愈多的社區項目加入並遵循該標準。php

參考:http://psr.phphub.org/sql

PSR-0 自動加載 X已廢棄
PSR-1 基本代碼規範
PSR-2 代碼樣式
PSR-3 日誌接口
PSR-4 如何指定文件路徑從而自動加載類定義

PSR-1基本代碼規範

本篇規範制定了代碼基本元素的相關標準,以確保共享的PHP代碼間具備較高程度的技術互通性。函數

文件編碼

  1. PHP代碼文件 必須 以 <?php 或 <?= 標籤開始;
  2. PHP代碼文件 必須 以 不帶 BOM 的 UTF-8 編碼;
  3. PHP代碼中 應該 只定義類、函數、常量等聲明,或其餘會產生 反作用 的操做

(如:生成文件輸出以及修改 .ini配置文件等),兩者只能選其一;spa

命名空間與類debug

  1. 類命名 必須 遵循 StudlyCaps 大寫開頭的駝峯命名規範;
  2. 每一個類都獨立爲一個文件,且命名空間至少有一個層次:頂級的組織名稱(vendorname)
  3. 類屬性:小寫開頭駝峯 $studlyCaps
  4. 類方法:小寫開頭駝峯

常量3d

  1. 類中的常量全部字母都 必須 大寫,單詞間用下劃線分隔;
  2. 方法名稱 必須 符合 camelCase 式的小寫開頭駝峯命名規範。

PSR-2編碼風格規範

縮進日誌

  1. 代碼 必須 使用4個空格符而不是「Tab 鍵」進行縮進。

代碼規範

  1. 每行的字符數 應該 軟性保持在 80 個以內,必定不可 多於 120 個,但 必定不可 有硬性限制。
  2. 全部PHP文件必須以一個空白行做爲結束。
  3. 每行 必定不可存在多於一條語句 每一個 namespace 命名空間聲明語句和 use 聲明語句塊後面,必須 插入一個空白行。
  4. 類的開始花括號({) 必須 寫在函數聲明後自成一行,結束花括號(})也 必須寫在函數主體後自成一行。
  5. 方法的開始花括號({) 必須 寫在函數聲明後自成一行,結束花括號(})也 必須 寫在函數主體後自成一行。
  6. 控制結構的開始花括號({) 必須 寫在聲明的同一行,而結束花括號(}) 必須 寫在主體後自成一行。

修飾符code

類的屬性和方法 必須 添加訪問修飾符(private、protected 以及 public),abstract 以及final 必須 聲明在訪問修飾符以前,而 static 必須 聲明在訪問修飾符以後。

空格

  1. 類方法參數每一個逗號後面必需要有一個空格,而逗號前面 必定不可 有空格
  2. 控制結構的開始左括號後和結束右括號前,都 必定不可 有空格符。

關鍵字

  1. 控制結構的關鍵字後必需要有一個空格符,而調用方法或函數時則必定不可有。
  2. PHP全部 關鍵字 必須 所有小寫,常量 true 、false 和 null 也 必須 所有小寫。

PSR-3日誌接口規範

  1. LoggerInterface 接口對外定義了八個方法,分別用來記錄 RFC 5424 中定義的八個等級的日誌:debug、 info、 notice、 warning、 error、 critical、 alert 以及 emergency 。
  2. 第九個方法 —— log,其第一個參數爲記錄的等級。可以使用一個預先定義的等級常量做爲參數來調用此方法,必須 與直接調用以上八個方法具備相同的效果。
  3. 若是傳入的等級常量參數沒有預先定義,則 必須 拋出PsrLogInvalidArgumentException 類型的異常。在不肯定的狀況下,使用者 不應 使用未支持的等級常量來調用此方法。
/**

 * 日誌等級常量定義

 */

class LogLevel

{

    constEMERGENCY='emergency';

    constALERT     ='alert';

    constCRITICAL  ='critical';

    constERROR     ='error';

    constWARNING   ='warning';

    constNOTICE    ='notice';

    constINFO      ='info';

    constDEBUG     ='debug';

}

PSR-4自動加載規範

相似以下範例:<NamespaceName>(<SubNamespaceNames>)*<ClassName>

  1. 徹底合規類名必須有一個頂級命名空間(Vendor Name)
  2. 徹底合規類名能夠有多個子命名空間
  3. 徹底合規類名應該有一個終止類名
  4. 下劃線在徹底合規類名中是沒有特殊含義的
  5. 字母在徹底合規類名中能夠是任何大小寫的組合
  6. 全部類名必須以大小寫敏感的方式引用
  7. 終止類名對應一個以 .php 結尾的文件。文件名必須和終止類名大小寫匹配

一些實際商用項目中使用的規範

控制層

  1. 不出現sql語句(sql封裝到模型層而後做爲方法調用)
  2. sql語句、3行以上邏輯代碼空行
  3. 上下文關係函數或方法間不空行
  4. bool使用if(true === $name)的形式
  5. 使用雙引號連接變量
  6. 注意隱式轉換
  7. 使用全局變量須要註釋其含義,取值範圍:

clipboard.png

8 函數頭部以下注釋:

clipboard.png

或者

clipboard.png

9 註釋間空行:

clipboard.png

10 文件頭部註釋:

clipboard.png

或者

clipboard.png

11 switch語句的case跳轉須要註釋

12 標記變量的命名:

clipboard.png

13 接口的命名前綴

clipboard.png

14 狀態碼儘可能使用常量,而不是難以理解的數字

clipboard.png

15 類文件名使用首大寫駝峯方式,普通文件名使用下劃線方式

16 配置裏的變量名使用下劃線方式

相關文章
相關標籤/搜索