【PHP】PSR簡要規範

【PHP】PSR簡要規範

 

PSR是一系列關於PHP開發的規範,分有好幾個版本,本身學的也較爲膚淺,但仍是但願能時常查看規範,爲了方便記憶和遵循,我把關鍵詞爲必須的撿拾出來,作個簡單地必要規範的記錄。(就是個搬磚的。。。)
https://github.com/PizzaLiu/PHP-FIG
http://segmentfault.com/a/1190000002521577php

官方發佈文件版本

必須

PSR-1 基本代碼規範

  • PHP代碼文件必以 <?php 或 <?= 標籤開始編碼

  • PHP代碼文件必須以 不帶BOM的 UTF-8 編碼spa

  • 命名空間以及類必須符合 PSR 的自動加載規範:PSR-0 或 PSR-4 中的一個日誌

  • 類的命名必須遵循 StudlyCaps 大寫開頭的駝峯命名規範

  • 類中的常量全部字母都必須大寫,單詞間用下劃線分隔;

  • 方法名稱必須符合 camelCase 式的小寫開頭駝峯命名規範

  • PHP代碼必須使用 <?php ?> 長標籤  <?= ?> 短輸出標籤; 必定不可以使用其它自定義標籤。

  • 命名空間以及類的命名必須遵循 PSR-0.

  • PHP 5.3及之後版本的代碼必須使用正式的命名空間

  • 每一個類都獨立爲一個文件,且命名空間至少有一個層次:頂級的組織名稱(vendor name)

PSR-2 代碼風格規範

  • 代碼必須遵循 PSR-1 中的編碼規範 。

  • 代碼必須使用4個空格符而不是 tab鍵 進行縮進

備註: 使用空格而不是tab鍵縮進的好處在於, 避免在比較代碼差別、打補丁、重閱代碼以及註釋時產生混淆。 而且,使用空格縮進,讓對齊變得更方便。

  • 每一個 namespace 命名空間聲明語句和 use 聲明語句塊後面,必須插入一個空白行

  • 類的開始花括號({)必須寫在函數聲明後自成一行結束花括號(})也必須寫在函數主體後自成一行

  • 方法的開始花括號({)必須寫在函數聲明後自成一行結束花括號(})也必須寫在函數主體後自成一行

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

  • 控制結構的關鍵字後必需要有一個空格符,而調用方法或函數時則必定不能有

  • 控制結構的開始花括號({)必須寫在聲明的同一行,而結束花括號(})必須寫在主體後自成一行

  • 控制結構的開始左括號後和結束右括號前,都必定不能有空格符

  • 全部PHP文件必須使用Unix LF (linefeed)做爲行的結束符

  • 全部PHP文件必須以一個空白行做爲結束

  • 純PHP代碼文件必須省略最後的 ?> 結束標籤

  • 每行必定不能存在多於一條語句

  • 非空行後必定不能有多餘的空格符

  • PHP全部 關鍵字必須所有小寫

  • 常量 true 、false 和 null 也必須所有小寫

PSR-3 日誌接口規範

PSR-4 自動加載規範

  • 一個完整的類名需具備如下結構:

\<命名空間>(\<子命名空間>)*\<類名>
完整的類名必需要有一個頂級命名空間,被稱爲 "vendor namespace";

完整的類名能夠有一個或多個子命名空間;

完整的類名必須有一個最終的類名;

完整的類名中任意一部分中的下滑線都是沒有特殊含義的;

完整的類名能夠由任意大小寫字母組成;

全部類名都必須是大小寫敏感的。
  • 當根據完整的類名載入相應的文件

完整的類名中,去掉最前面的命名空間分隔符,前面連續的一個或多個命名空間和子命名空間,做爲「命名空間前綴」,其必須與至少一個「文件基目錄」相對應;

緊接命名空間前綴後的子命名空間必須與相應的」文件基目錄「相匹配,其中的命名空間分隔符將做爲目錄分隔符。

末尾的類名必須與對應的以 .php 爲後綴的文件同名。

自動加載器(autoloader)的實現必定不能拋出異常、必定不能觸發任一級別的錯誤信息以及不該該有返回值。

建議(更多請查看詳細文檔)

PSR-1

  • PHP代碼中應該只定義類、函數、常量等聲明,或其餘會產生 從屬效應 的操做(如:生成文件輸出以及修改.ini配置文件等),兩者只能選其一;

  • 類的屬性命名能夠遵循 大寫開頭的駝峯式 ($StudlyCaps)、小寫開頭的駝峯式 ($camelCase) 又或者是 下劃線分隔式 ($under_score),本規範不作強制要求,但不管遵循哪一種命名方式,都應該在必定的範圍內保持一致。

PSR-2

  • 每行的字符數應該軟性保持在80個以內, 理論上必定不可多於120個, 但必定不能有硬性限制。

  • 空行可使得閱讀代碼更加方便以及有助於代碼的分塊。

代碼示例

PSR-2

<?php
namespace Vendor\Package;

use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class Foo extends Bar implements FooInterface
{
    public function sampleFunction($a, $b = null)
    {
        if ($a === $b) {
            bar();
        } elseif ($a > $b) {
            $foo->bar($arg1);
        } else {
            BazClass::bar($arg2, $arg3);
        }
    }

    final public static function bar()
    {
        // method body
    }
}
相關文章
相關標籤/搜索