PHP的PSR推薦規範,PSR-1,PSR-2,PSR-3,PSR-4詳解


PHP的PSR推薦規範,PSR-1,PSR-2,PSR-3,PSR-4詳解

PSR是php standards recommendation(php推薦標準)的簡稱。 PHP-FIG制定了每個推薦的規範用於解決大多數php框架經常會遇到的某個具體問題。 php框架無需頻繁解決相同的問題,他們可以遵守PHP-FIG制定的推薦規範,使用共用的方案來解決。

目前位置,PHP-FIG共發布了5個推薦標準。
PSR-1:基本的代碼風格
PSR-2:嚴格的代碼風格
PSR-3:日誌記錄器接口
PSR-4:自動加載
注意:在這裡你可能發現只有四個推薦標準,可是前面你說是五個標準。 PHP-FIG廢棄了第一份推薦規範PSR-0。第一份推薦標準被新發布的PSR-4替代了。

PSR-1:基本的代碼風格

PHP標籤:
    必須把php代碼放在<?php ?>或<?= ?>標籤中。不得使用其他的PHP標籤語法。

編碼:
所有PHP文件都必須使用UTF-8字符集編碼。

目的:
    一個PHP文件可以定義符號(類、性狀、函數和常量等),或者執行有副作用的操作(例如:生成結果或者處理數據),但不能呢個同時做這兩件事。這是一個簡單的要求,我們只需要深謀遠慮一點。

自動加載:
PHP命名空間和類必須遵守PSR-4自動加載器標準。

類的名稱:
PHP類的名稱使用駝峰式。

常量的名稱:
PHP常量的名稱必須全部使用大寫。

方法的名稱:
PHP方法的名稱必須一直使用駝峰式。

PSR-2:嚴格的代碼風格

在使用PSR-2推薦規範的前提是,必須遵守PSR-1推薦規範。
縮進:
PSR-2推薦規範要求PHP代碼使用4個空格縮進。
因為,在不同的編輯器中,空格的渲染效果基本一致的,但是製表符卻不一致。

文件和代碼行:
    PHP文件必須使用UNIX風格的換行符,最後要有一個空行,而且不能使用PHP關閉標籤?>。每行代碼不能超過80個字符,至少不能超過120字符。每行的末尾不能有空格。
為什麼PHP文件不使用?>關閉標籤?
因為我們不寫關閉標籤,這樣能避免意外的輸出錯誤。如果加上關閉標籤?>,而且在關閉標籤的後面出現空行,那麼這個空行會被當成輸出,導致出錯。

關鍵字:
PSR-2推薦規範要求,PHP關鍵字都應該使用小寫字母。

命名空間:
    每個命名空間聲明語句後必須跟著一個空行。

類:
    類定義的結束括號必須在定義體之後新起一行寫。如果擴展其他類或實現接口,extends和implements關鍵字必須和類名寫在同一行。

<?php
        namespace my\app

        class Admin extends User
        {
            // 類的定義體
        }

方法:
方法定義體的括號位置和類定義體的括號位置一樣:方法定義體的起始括號要在方法名之後新起一行寫;方法定義體的結束括號要在定義體之後新起一行寫。要特別注意方法的參數;起始圓括號之後沒有空格,結束括號之前也沒有空格。方法的每個參數(除了最後一個)後面有一個逗號和空格。

<?php
        namespace my\app

        class Admin extends User
        {
             public function AdminLogin($num=1, $name='abc')
             {
               // 方法的定義體
             }
        }

可見性:
     類中的每個屬性和方法都要聲明可見性。可見性由public,protected或private指定,其作用是決定在類的內部和外部訪問屬性和方法。如果把類屬性和方法聲明為abstract和final,這兩個限定符必須放在可見性關鍵字之前。如果把屬性或方法聲明為static,這個限定符必須放在可見性關鍵字之後。

<?php
        namespace my\app

        class Admin
        {
            public static $name =1;
            public function __construct()
            {
                static::$name++;
            }
        }

拓展:

abstract是什麼,怎麼使用?

abstract是抽象的意思。
1、沒有抽象方法的抽像類是沒有意義的。
2、抽象方法在子類中必須重寫。
3、抽象方法在類中,此類必須聲明為抽像類。
4、抽像類中,不能重寫父類的抽象方法。

    final是什麼,怎麼使用?

final是最終的意思。
1、final類不可被繼承。
2、final方法不可重寫。

    static是什麼,怎麼使用?

static是靜態的意思。
1、類中:
self::屬性 self::方法。
2、子類:
parent::屬性 parent::方法。
3、外部:
類名/子類名::屬性 類名/子類名::方法

控制結構: