PSR規範

PSR前言

  • FIG組織制定PHP相關規範,PSR目的經過代碼共同點找出一個協做編程的方法


psr0(官方已廢棄)

使用自動加載遵照的規範php

  • 每一個命名空間必須有一個頂級空間名
  • 加載源文件,空間名分割符被轉成DIRECTORY_SEPARATOR
  • 類名每一個下劃線被轉成DIRECTORY_SEPARATOR
  • 標準的命名空間加載源文件以 .php 後綴
  • 空間名、類名以大小寫字母組合而成
namespacepackageClass_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
namespacepackage_nameClass_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php

PSR-1

基礎編碼規範git

  • 源文件編碼格式必須不帶BOM的UTF8
  • 縮進4個空格
  • 類的聲明括號({})單獨一行,方法也是
  • 方法參數之間要有逗號和空格
  • 類中方法和屬性帶能夠見(public,private,protect)
  • 類名用駝峯式(StudlyCaps)大寫開頭
  • 方法名稱 必須 符合 camelCase 式的小寫開頭駝峯命名規範
  • 類常量必須只由大寫字母和下劃線(_)組成
  • 代碼必須只使用長標籤()或短標籤樹人初(<?=? >)
  • 空間名和類名遵照psr0規範
  • 方法名必須使用camelCase()風格聲明
  • 控制結構 if else switch case while for foreach.... 控制結構關鍵字與括號要有一個空格,開始的圓括號後面及結束的圓括號前面不能有空格。起始花括號與關鍵字在一行上

反作用:
定義:僅僅經過包含文件,不直接聲明類、函數和常量等,而執行的邏輯操做github

產生輸出 直接require或include,鏈接外部服務,修改ini配置,觸發錯誤或異常,修改全局或者靜態變量,讀取或修改文件等等編程

PSR-2

編碼風格規範,減小因代碼風格不一樣而形成不便緩存

  • 遵照PSR-1編碼規範
  • 每行 不應 多於80個字符,大於80字符的行 應該 折成多行
  • 每行 必定不可 存在多於一條語句
  • final 必須聲明在修飾符前
  • static 必須在修飾符後
  • true false 和null 必須所有小寫,關鍵字所有小寫
  • namespace 聲明後插入一個空白行
  • use聲明句塊後必須插入一個空白行
  • 關鍵詞 extends 和 implements必須寫在類名稱的同一行
  • implements 的繼承列表也能夠分紅多行
  • 方法參數列表中,每一個逗號後面必須有一個空格
  • switch case 若是存在非空case直穿語句
<?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
    }
}
<?php
switch ($expr) {
    case 0:
        echo 'First case, with a break';
        break;
    case 1:
        echo 'Second case, which falls through';
        // no break
    case 2:
    case 3:
    case 4:
        echo 'Third case, return instead of break';
        return;
    default:
        echo 'Default case';
        break;
}
  • 閉包聲明時,關鍵詞 function 後以及關鍵詞 use 的先後都必需要有一個空格
  • 開始花括號必須寫在聲明的同一行,結束花括號必須緊跟主體結束的下一行
  • 參數列表逗號後必須有空格
  • 閉包有默認值參數必須放到最後
<?php
$closureWithArgs = function ($arg1, $arg2) {
    // body
};

$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
    // body
};

PSR-3

日誌類庫通用接口規範閉包

PSR-4

升級版的PSR-0自動加載規範函數

  • 下劃線不存在實際意義
  • 類名必須大小寫敏感
  • autoloader的實現必定不能拋出異常,不能有任何級別的錯誤以及不該該有返回值
  • 類名必須以.php爲後綴
  • 子命名空間必須與相應文件目錄匹配,命名空間分隔符做爲目錄分隔符

psr-0和psr4對比ui

定義
    Foo\Bar => vendor\foo\bar\src
    使用
    use Foo\Bar\Tool\Request
    PSR-0實際目錄 vendor\foo\bar\src\Foo\Bar\Tool\Request.php
    PSR-4實際目錄 vendor\foo\bar\src\Tool\Request.php

PSR-6

緩存接口規範編碼

  • 緩存必定不可做爲應用程序不可獲取核心功能
  • 緩存錯誤必定不可致使應用程序故障,捕捉底層存儲驅動拋出異常
  • 延遲:緩存項可能不會理解被存儲到物理緩存池,全部延遲緩存都必須作持久化
  • 命中 請求一個緩存項時,在緩存池能找到對應緩存項,保證不會因任何緣由出現錯誤,確保驗證isHit()才調用get()獲取數據

PSR-7

HTTP消息傳遞接口spa

  • HTTP信息包含大小寫不明感頭信息(接口實現類必須大小寫敏感)
請求方法 目標地址 HTTP協議
POST /path HTTP/1.1
目的主機 空一行消息內容
Host: example.com

foo=bar&baz=bat
HTTP協議 狀態麼 描述文本
HTTP/1.1 200 OK
內容類型 空一行消息內容
Content-Type: text/plain

foo=bar&baz=bat

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md

https://www.phpxy.com/psr/

相關文章
相關標籤/搜索