本篇規範制定了代碼基本元素的相關標準,以確保共享的 PHP 代碼間具備較高程度的技術互通性。php
本文件中的 必須
,不得
,須要
,應
,不該
,應該
,不該該
,推薦
,可能
和 可選
等能願動詞按照 RFC 2119 中的描述進行解釋。html
PHP 代碼文件 必須 以 <?php
或 <?=
標籤開始;git
PHP 代碼文件 必須 以 不帶 BOM 的 UTF-8
編碼;github
PHP 代碼中 應該 只定義類、函數、常量等聲明,或其餘會產生 反作用
的操做(如:生成文件輸出以及修改 .ini 配置文件等),兩者只能選其一;ide
類的命名 必須 遵循 StudlyCaps
大寫開頭的駝峯命名規範;ui
類中的常量全部字母都 必須 大寫,單詞間用下劃線分隔;編碼
方法名稱 必須 符合 camelCase
式的小寫開頭駝峯命名規範。spa
PHP 代碼 必須 使用 <?php ?>
長標籤 或 <?= ?>
短輸出標籤;
必定不可 使用其它自定義標籤。代碼規範
PHP 代碼 必須 且只可以使用 不帶 BOM 的 UTF-8
編碼。
一份 PHP 文件中 應該 要不就只定義新的聲明,如類、函數或常量等不產生 反作用
的操做,要不就只書寫會產生 反作用
的邏輯操做,但 不應 同時具備二者。
「反作用」(side effects) 一詞的意思是,僅僅經過包含文件,不直接聲明類、函數和常量等,而執行的邏輯操做。
「反作用」包含卻不只限於:生成輸出,明確使用 require 或 include,鏈接到外部服務,修改 ini 設置,發出錯誤或異常,修改全局或靜態變量,讀取或寫入一個文件,等等。
如下是一個 反例
,一份包含「函數聲明」以及產生「反作用」的代碼:
<?php // 「反作用」:修改 ini 配置 ini_set('error_reporting', E_ALL); // 「反作用」:引入文件 include "file.php"; // 「反作用」:生成輸出 echo "<html>\n"; // 聲明函數 function foo() { // function body }
下面是一個範例,一份只包含聲明不產生「反作用」的代碼:
<?php // 聲明函數 function foo() { // 函數主體部分 } // 條件聲明 **不** 屬於「反作用」 if (! function_exists('bar')) { function bar() { // 函數主體部分 } }
命名空間和類名 必須 遵循『自動加載』規範: [PSR-0, PSR-4]。
這意味着每一個類都獨立爲一個文件,而且至少在一個層次的命名空間內,那就是:頂級組織名(vendor name)。
類名 必須 以相似 StudlyCaps
形式的大寫開頭的駝峯命名方式聲明。
PHP 5.3 及更高版本的代碼 必須 使用正式的命名空間。
舉個例子:
<?php // PHP 5.3 及更高版本: namespace Vendor\Model; class Foo { }
PHP 5.2 及更低版本 應該 使用僞命名空間,約定俗成,以頂級組織名稱 Vendor_
爲類名前綴:
<?php // PHP 5.2.x 及更低版本: class Vendor_Model_Foo { }
此處的「類」指代全部的類、接口以及可複用代碼塊(traits)。
類的常量中全部字母都 必須 大寫,詞間如下劃線分隔。例如:
<?php namespace Vendor\Model; class Foo { const VERSION = '1.0'; const DATE_APPROVED = '2012-06-01'; }
類的屬性命名 能夠 遵循:
$StudlyCaps
)$camelCase
)$under_score
)本規範不作強制要求,但不管遵循哪一種命名方式,都 應該 在必定的範圍內保持一致。這個範圍能夠是整個團隊、整個包、整個類或整個方法。
方法名稱 必須 符合 camelCase()
式的小寫開頭駝峯命名規範。