1. 程式人生 > >PHP 基本程式碼規範 PSR-1(通用版)

PHP 基本程式碼規範 PSR-1(通用版)

##PHP 基本程式碼規範 PSR-1 本節我們將會討論一些基本的程式碼規範問題,以此作為將來討論更高級別的程式碼分享和技術互用的基礎。

RFC 2119中的 必須(MUST)不可(MUST NOT)建議(SHOULD)不建議(SHOULD NOT)可以/可能(MAY)等關鍵詞將在本節用來做一些解釋性的描述。

##1. 概述

  • 原始檔 必須 只使用 <?php<?= 這兩種標籤。
  • 原始檔中php程式碼的編碼格式 必須 只使用不帶 位元組順序標記(BOM)UTF-8
  • 一個原始檔建議只用來做宣告(類(class)函式(function)常量(constant)等)或者只用來做一些引起副作用的操作(例如:輸出資訊,修改.ini
    配置等),但不建議這兩件事。
  • 名稱空間(namespace)類(class) 必須遵守PSR-0標準。
  • 類名(class name) 必須使用駱駝式(StudlyCaps)寫法 (譯者注:駝峰式(cameCase)的一種變種,後文將直接用StudlyCaps表示)。
  • 類(class)中的常量必須只由大寫字母和下劃線(_)組成。
  • 方法名(method name) 必須使用駝峰式(cameCase)寫法(譯者注:後文將直接用camelCase表示)。

##2. 檔案 ###2.1. PHP標籤 PHP程式碼必須只使用長標籤(<?php ?>)或者短輸出式標籤(<?= ?>)

;而 不可 使用其他標籤。

###2.2. 字元編碼 PHP程式碼的編碼格式 必須 只使用不帶位元組順序標記(BOM)UTF-8

###2.3. 副作用

  • 一個原始檔 建議 只用來做宣告(類(class)函式(function)常量(constant)等)或者只用來做一些引起副作用的操作(例如:輸出資訊,修改.ini配置等),但不建議同時做這兩件事。

  • 短語 副作用(side effects) 的意思是 在包含檔案時 所執行的邏輯與所宣告的 類(class)函式(function)常量(constant) 等沒有直接的關係。

  • 副作用(side effects) 包含但不侷限於:產生輸出,顯式地使用 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()
        {
            // 函式體
        }
    }
    

##3. 空間名(namespace)和類名(class name)

  • 名稱空間(namespace)類(class) 必須 遵守 PSR-0.

  • 這意味著一個原始檔中只能有一個 類(class) ,並且每個 類(class) 至少要有一級 空間名(namespace) :即一個頂級的 組織名(vendor name)

  • 類名(class name) 必須 使用 StudlyCaps 寫法。

  • PHP5.3 之後的程式碼 必須 使用正式的 名稱空間(namespace)

  • 例子:

<?php
    // PHP 5.3 及之後:
    namespace Vendor\Model;
    
    class Foo
    {
    }
  • PHP5.2.x 之前的程式碼 建議 用偽 名稱空間Vendor_ 作為 類名(class name) 的字首
<?php
    // PHP 5.2.x 及之前:
    class Vendor_Model_Foo
    {
    }

##4. 類的常量、屬性和方法 術語 類(class) 指所有的 類(class)介面(interface)特性(trait)

###4.1. 常量 類常量 必須 只由大寫字母和 下劃線(_) 組成。 例子:

<?php
    namespace Vendor\Model;
    
    class Foo
    {
        const VERSION = '1.0';
        const DATE_APPROVED = '2012-06-01';
    }

###4.2. 屬性

本指南中故意不對 $StulyCaps$camelCase 或者 $unser_score 中的某一種風格作特別推薦,完全由讀者依據個人喜好決定屬性名的命名風格。

但是不管你如何定義屬性名, 建議 在一個合理的範圍內保持一致。這個範圍可能是 組織(vendor) 級別的,包(package) 級別的, 類(class) 級別的,或者 方法(method) 級別的。

###4.3. 方法

方法名則 必須 使用 camelCase() 風格來宣告。