PHP中對PSR-一、PSR-2規範理解

PHP-FIG

在說啥是PSR-[0-4]規範的以前,我以爲咱們有必要說下它的發明者和規範者:PHP-FIG。就是這個聯盟組織發明和創造了PSR-[0-4]規範php

FIG 是 Framework Interoperability Group(框架可互用性小組)的縮寫,由幾位開源框架的開發者成立於
2009 年,從那開始也選取了不少其餘成員進來,雖然不是 「官方」 組織,但也表明了社區中不小的一塊。
項目的目的在於:經過框架做者或者框架的表明之間討論,以最低程度的限制,制定一個協做標準,各個框架遵循統一的編碼規範,避免各家自行發展的風格阻礙了
PHP 的發展,解決這個程序設計師由來已久的困擾。

目前已表決經過了 6 套標準,已經獲得大部分 PHP 框架的支持和承認。html

1 基礎編碼規範 PSR-1
2 編碼風格規範 PSR-2
3 日誌接口規範 PSR-3
4 自動加載規範 PSR-4
6 緩存接口規範 PSR-6
7 HTTP 消息接口規範laravel


基礎編碼規範

  1. PHP代碼文件 必須<?php<?= 標籤開始;
  2. PHP代碼文件 必須 以 不帶 BOM 的 UTF-8 編碼;
  3. PHP代碼中 應該 只定義類、函數、常量等聲明,或其餘會產生 反作用 的操做(如:生成文件輸出以及修改 .ini配置文件等),兩者只能選其一;git

    「反作用」(side effects) 一詞的意思是,僅僅經過包含文件,不直接聲明類、函數和常量等,而執行的邏輯操做。
    「反作用」包含卻不只限於:github

    • 生成輸出
    • 直接的 require 或 include
    • 鏈接外部服務
    • 修改 ini 配置
    • 拋出錯誤或異常
    • 修改全局或靜態變量
    • 讀或寫文件等

    如下是一個 反例,一份包含「函數聲明」以及產生「反作用」的代碼:緩存

    <?php
    // 「反作用」:修改 ini 配置
    ini_set('error_reporting', E_ALL);
    
    // 「反作用」:引入文件
    include "file.php";
    
    // 「反作用」:生成輸出
    echo "<html>\n";
    
    // 聲明函數
    function foo()
    {
        // 函數主體部分
    }

    下面是一個僅包含聲明的示例文件;即應提倡的例子:框架

    <?php
    // 聲明
    function foo()
    {
        // 函數體
    }
    
    // 條件式聲明不算作是反作用
    if (! function_exists('bar')) {
        function bar()
        {
            // 函數體
        }
    }
  4. 命名空間以及類 必須 符合 PSR 的自動加載規範:[PSR-4]() 中的一個;
  5. 類的命名必須 遵循 StudlyCaps 大寫開頭的駝峯命名規範;ide

    類的屬性命名 能夠 遵循:函數

    • 大寫開頭的駝峯式 ($StudlyCaps)
    • 小寫開頭的駝峯式 ($camelCase)
    • 下劃線分隔式 ($under_score)

    本規範不作強制要求,但不管遵循哪一種命名方式,都 應該 在必定的範圍內保持一致。這個範圍能夠是整個團隊、整個包、整個類或整個方法。ui

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

    <?php
    namespace Vendor\Model;
    
    class Foo
    {
        const VERSION = '1.0';
        const DATE_APPROVED = '2012-06-01';
    }
  7. 方法名稱 必須 符合 camelCase 式的小寫開頭駝峯命名規範。

編碼風格規範

  1. 代碼必須遵照 PSR-1。
  2. 代碼必須使用4個空格來進行縮進,而不是用製表符。
  3. 一行代碼的長度不建議有硬限制;軟限制必須爲120個字符,建議每行代碼80個字符或者更少。
  4. 在命名空間(namespace)的聲明下面必須有一行空行,而且在導入(use)的聲明下面也必須有一行空行。
  5. 類(class)的左花括號必須放到其聲明下面自成一行,右花括號則必須放到類主體下面自成一行。
  6. 方法(method)的左花括號必須放到其聲明下面自成一行,右花括號則必須放到方法主體的下一行。

    <?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()
        {
            // 方法主體
        }
    }
  7. 全部的屬性(property)和方法(method)必須有可見性聲明;抽象(abstract)和終結(final)聲明必須在可見性聲明以前;而靜態(static)聲明必須在可見性聲明以後。

    <?php
    namespace Vendor\Package;
    
    abstract class ClassName
    {
        protected static $foo;
    
        abstract protected function zim();
    
        final public static function bar()
        {
            // 方法主體部分
        }
    }
  8. 在控制結構關鍵字的後面必須有一個空格;而方法(method)和函數(function)的關鍵字的後面不可有空格。
  9. 控制結構的左花括號必須跟其放在同一行,右花括號必須放在該控制結構代碼主體的下一行。
  10. 控制結構的左括號以後不可有空格,右括號以前也不可有空格。

    <?php
    if ($expr1) {
        // if body
    } elseif ($expr2) {
        // elseif body
    } else {
        // else body;
    }

日誌接口規範

詳見


自動加載規範

詳見


緩存接口規範

詳見


HTTP 消息接口規範

詳見,暫無中文翻譯

相關文章
相關標籤/搜索