目的
為了更好的提高技術(shù)部的工作效率,保證開發(fā)的有效性和合理性饶深,并可最大程度的提高程序代碼的可讀性和可重復(fù)利用性奔浅,指定此規(guī)范。
整體要求
本規(guī)范以PSR規(guī)范為基礎(chǔ)擴(kuò)展補(bǔ)充制定邻遏。 完全遵守PSR-1糠亩, PSR-2規(guī)范。
規(guī)范包命名規(guī)范准验、代碼縮進(jìn)規(guī)則赎线、控制結(jié)構(gòu)、函數(shù)調(diào)用糊饱、函數(shù)定義垂寥、注釋、包含代碼另锋、PHP標(biāo)記滞项、文件頭的注釋塊、常量命名等方面的規(guī)則夭坪。
規(guī)范
- 文件
- 源文件 必須 只使用 <?php文判。
- 源文件中php代碼的編碼格式 必須 只使用不帶BOM的UTF-8。
- 源文件在文件結(jié)尾處 必須 忽略掉?>且 必須 以一個空行結(jié)尾台舱。
- 類定義文件建議使用類名作為文件名律杠。
- 類文件必須使用命名空間為路徑存儲潭流。
- 類文件名和類名保存一致竞惋,用首字母大寫。其他文件全部用小寫字母加下劃線灰嫉。
- 基礎(chǔ)規(guī)范
一個源文件 建議 只用來做聲明(類拆宛,函數(shù),常量等)或者只用來做一些輔助作用的操作(例如:輸出信息讼撒,修改.ini配置等),但不應(yīng)當(dāng)同時做這兩件事浑厚。
類名 必須 使用 StudlyCaps 寫法,比如SampleController。
類中的常量 必須 只由大寫字母和下劃線(_)組成根盒。
方法名 必須 使用 camelCase(駝峰式)寫法,比如getTotalById钳幅。 - 代碼規(guī)范
代碼必須使用4個空格符而不是 tab鍵 進(jìn)行縮進(jìn)。
備注: 使用空格而不是 tab鍵 縮進(jìn)的好處在于炎滞,
避免在比較代碼差異敢艰、打補(bǔ)丁、重閱代碼以及注釋時產(chǎn)生混淆册赛。
并且钠导,使用空格縮進(jìn)震嫉,讓對齊變得更方便。
關(guān)鍵字 以及 true / false / null
PHP所有 關(guān)鍵字必須全部小寫牡属。
常量 true 票堵、false 和 null 也必須全部小寫。
每行的字符數(shù)應(yīng)該保持在100個以內(nèi)逮栅, 通常情況不應(yīng)超過150個悴势。如果換行可能破壞語意或降低可閱讀性,可作為例外超出限制证芭。
每個 namespace 命名空間聲明語句和 use 聲明語句塊后面瞳浦,必須插入一個空白行。所有 use 必須 在 namespace 后聲明废士。每條 use 聲明語句 必須 只有一個 use 關(guān)鍵詞叫潦。use 聲明語句塊后 必須 要有一個空白行。例如:
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
// ... additional PHP code ...
擴(kuò)展與繼承,關(guān)鍵詞 extends 和 implements 必須寫在類名稱的同一行,類的開始花括號必須獨(dú)占一行官硝,結(jié)束花括號也必須在類主體后獨(dú)占一行矗蕊。
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
// constants, properties, methods
}
implements 的繼承列表也可以分成多行,這樣的話氢架,每個繼承接口名稱都必須分開獨(dú)立成行傻咖,包括第一個。
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements
\ArrayAccess,
\Countable,
\Serializable
{
// constants, properties, methods
}
類的開始花括號({)必須寫在函數(shù)聲明后自成一行岖研,結(jié)束花括號(})也必須寫在函數(shù)主體后自成一行卿操。
方法的開始花括號({)必須寫在函數(shù)聲明后自成一行,結(jié)束花括號(})也必須寫在函數(shù)主體后自成一行孙援。
一個標(biāo)準(zhǔn)的方法聲明可參照以下范例害淤,留意其括號、逗號拓售、空格以及花括號的位置窥摄。
<?php
namespace Vendor\Package;
class ClassName
{
public function fooBarBaz($arg1, &$arg2, $arg3 = [])
{
// method body
}
}
類的屬性和方法必須添加訪問修飾符(private、protected 以及 public)础淤, abstract 以及 final 必須聲明在訪問修飾符之前崭放,而 static 必須聲明在訪問修飾符之后。
以下是屬性聲明的一個范例
<?php
namespace Vendor\Package;
class ClassName
{
public $foo = null;
}
需要添加 abstract 或 final 聲明時鸽凶, 必須 寫在訪問修飾符前币砂,而 static 則必須寫在其后。
<?php
namespace Vendor\Package;
abstract class ClassName
{
protected static $foo;
abstract protected function zim();
final public static function bar()
{
// method body
}
}
- 控制結(jié)構(gòu)的基本規(guī)范如下
控制結(jié)構(gòu)的關(guān)鍵字后 必須 要有一個空格符玻侥,而調(diào)用方法或函數(shù)時則一定不能有决摧。
控制結(jié)構(gòu)的開始花括號({) 必須 寫在聲明的同一行,而結(jié)束花括號(})必須寫在主體后自成一行。
控制結(jié)構(gòu)的開始左括號后和結(jié)束右括號前蜜徽,都一定不能有空格符祝懂。
case 語句 必須 相對 switch 進(jìn)行一次縮進(jìn),而 break 語句以及 case 內(nèi)的其它語句都 必須 相對 case 進(jìn)行一次縮進(jìn)拘鞋。
如果存在非空的 case 直穿語句砚蓬,主體里必須有類似 // no break 的注釋。例如:
<?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;
}
應(yīng)該 使用關(guān)鍵詞 elseif 代替所有 else if盆色,以使得所有的控制關(guān)鍵字都像是單獨(dú)的一個詞灰蛙。例如:
<?php
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}
運(yùn)算符(=, +, -, *, /, %, +=等等)左右兩邊 必須要有 一個空格。
參數(shù)和變量列表中逗號(隔躲,)前 必須不能有 空格摩梧,而逗號后 必須要有 空格。
<?php
namespace Vendor\Package;
class ClassName
{
public function foo($arg1, &$arg2, $arg3 = [])
{
// method body
}
}
參數(shù)列表可以分列成多行宣旱,這樣仅父,包括第一個參數(shù)在內(nèi)的每個參數(shù)都 必須 單獨(dú)成行。
拆分成多行的參數(shù)列表后浑吟,結(jié)束括號以及方法開始花括號 必須 寫在同一行笙纤,中間用一個空格分隔。
<?php
namespace Vendor\Package;
class ClassName
{
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3 = []
) {
// method body
}
}
while 和 do while组力。一個規(guī)范的 while 語句應(yīng)該如下所示省容,注意其 括號、空格以及花括號的位置燎字。
<?php
while ($expr) {
// structure body
}
標(biāo)準(zhǔn)的 do while 語句如下所示腥椒,同樣的,注意其 括號候衍、空格以及花括號的位置笼蛛。
<?php
do {
// structure body;
} while ($expr);
標(biāo)準(zhǔn)的 for 語句如下所示,注意其括號脱柱、空格以及花括號的位置
<?php
for ($i = 0; $i < 10; $i++) {
// for body
}
標(biāo)準(zhǔn)的 foreach語句如下所示伐弹,注意其括號拉馋、空格以及花括號的位置榨为。例如:
<?php
foreach ($iterable as $key => $value) {
// foreach body
}
標(biāo)準(zhǔn)的 try catch語句如下所示,注意其括號煌茴、空格以及花括號的位置随闺。例如:
<?php
try {
// try body
} catch (FirstExceptionType $e) {
// catch body
} catch (OtherExceptionType $e) {
// catch body
}
閉包聲明時,關(guān)鍵詞 function 后以及關(guān)鍵詞use的前后都必須要有一個空格蔓腐。
<?php
$closureWithArgs = function ($arg1, $arg2) {
// body
};
$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
// body
};
變量名統(tǒng)一用駝峰命名法矩乐。