PHP編碼規範

 

 

一、 變量命名

a) 所有字母都使用小寫

b) 首字母根據變量值類型指定

i. 整數i

ii. 浮點數f

iii. 字符串s

iv. 布爾值b

v. 數組a

vi. 對象o

vii. 資源r

viii. 混合類型m

c) 使用’_’作爲每一個詞的分界

例如:

$i_age_max = 10;

$f_price = 22.5;

$s_name =‘harry’;

$b_flag = true;

$a_price = array();

$o_object = new class();

$r_file = fopen();

$m_var = array_combine($a_name, $a_flag);

 

二、 類命名

a) 使用大寫字母作爲詞的分隔,其他的字母均使用小寫,即駝峯格式。

b) 名字的首字母使用大寫

c) 不要使用下劃線(‘_’)

d) interface接口最好使用大寫字母I,並以Interface結尾

例如:

class NameOneTwo

class Name

interface IExampleInterface ()

 

三、 方法命名

a) 使用大寫字母作爲詞的分隔,其他的字母均使用小寫

b) 名字的首字母使用大寫,聲明爲 “private” 或 “protected” 的,使用’_’爲前綴

c) 不要使用下劃線(‘_’)

d) (與類命名一致的規則)

e) 對象的訪問器總是以 “get” 或 “set” 爲前綴,當使用設計模式如 單態模式(singleton)或工廠模式(factory),方法的名字應當包含模式的名字,這樣容易從名字識別設計模式。

例如:

class NameOneTwo{

public function DoIt() {};

protect function _HandleError() {};

private function _SayHello() {};

}

 

四、 類屬性命名

a) 屬性名前綴應以屬性值類型指定(具體參照變量命名規則)

b) 前綴後採用與類命名一致的規則

c) 私有屬性採用’_’爲前綴

例如:

class NameOneTwo {

public function VarAbc() {};

public function ErrorNumber() {};

public $iAge;

private $_iAge;

}

 

五、 方法中參數命名

a) 參照類屬性命名

例如:

class NameOneTwo {

public function VarAbc($sMsg) {};

}

 

六、 全局變量

a) 全局變量應該帶前綴‘g’

b) 其餘參照變量命名規則

例如:

global $gi_Age;

global $ga_Price

 

七、 定義命名/全局常量

a) 全局常量使用’_’分割每個單詞

b) 所有字母使用大寫

例如:

define(‘E_ERROR_MISSING_PARA’, 501);

 

八、 函數

a) 所有的字母採用小寫,使用’_’分割每個單詞

例如:

function some_bloody_function(){

}

 

九、 大括號{}規則

a) 將大括號放置關鍵詞下方的同列處或同行,推薦放到同行

例如:

function some_bloody_function() {

}

if (true) {

// code

}

 

十、 縮進/製表符規則

a) 使用製表符縮進

例如:

function some_bloody_function() {

if (true) {

//code

}

}

 

十一、 小括號、關鍵詞和函數規則

a) 不要把小括號和關鍵詞緊貼在一起,要用空格隔開它們

b) 小括號和函數名要緊貼在一起

c) 除非必要,不要在Return返回語句中使用小括號

例如:

if (condition) {

}

strcmp($sHello, $sEvening);

return 1;

 

十二、 If Then Else格式

佈局

if (條件1) { //註釋

}

else if (條件2) { //註釋

}

else { //註釋

}

如果你有用到else if語句的話,通常最好有一個else塊以用於處理未處理到的其他情況。可以的話放一個記錄信息註釋在else處,即使在else沒有任何的動作。

條件格式

總是將恆量放在等號/不等號的左邊,例如:

if ( 6 == $errorNum ) …

一個原因是假如你在等式中漏了一個等號,語法檢查器會爲你報錯。第二個原因是你能立刻找到數值,而不是在你的表達式的末端找到它。需要一點時間來習慣這個格式,但是它確實很有用。

 

十三、 Switch格式

a) default總應該存在,它應該不被到達,然而如果到達了就會觸發一個錯誤。

b) 如果你要創立一個變量,那就把所有的代碼放在塊中。

例如:

switch ($numPeople) {
case 1:
break;

case 2:
break;

default:
break;
}

 

十四、 ?:三元運算符

a) 把條件放在括號內以使它和其他的代碼相分離。

b) 如果可能的話,動作可以用簡單的函數。

c) 把所做的動作,“?”,“:”放在不同的行,除非他們可以清楚的放在同一行。

例如

(condition) ? funct1() : func2();

(condition)

? long statement

: another long statement;

 

十五、 代碼塊的聲明

a) 聲明代碼塊需要對齊。

例如

$iDate = 0;

$irDate = NULL;

$sName = ‘’;

$mName = NULL;

 

十六、 不要採用缺省方法測試非零值

不要採用缺省值測試非零值,也就是使用:

if (FAIL != f())

比下面的方法好:

if (f())

即使FAIL可以含有0值,也就是PHP認爲false的表示。在某人決定用-1代替0作爲失敗返回值的時候,一個顯式的測試就可以幫助你了。就算是比較值不會變化也應該使用顯式的比較;

例如:if (!($bufsize % strlen($str)))應該寫成:if (($bufsize % strlen($str)) == 0)以表示測試的數值(不是布爾)型。一個經常出問題的地方就是使用strcmp來測試一個字符等式,結果永遠也不會等於缺省值。

非零測試採用基於缺省值的做法,那麼其他函數或表達式就會受到以下的限制:

只能返回0表示失敗,不能爲/有其他的值。

命名以便讓一個真(true)的返回值是絕對顯然的,調用函數IsValid()而不是Checkvalid()。


十七、PHP註釋與方法解析

a) //單行註釋

b) 第二種
/*
* 多行註釋…
*
*/
c) 第三種
/**
* 多行文檔註釋…
*
*/

d) 關於文檔註釋的說明

/**
* 這是一個關於函數的註釋 …
*
*/
function bac(){}

/*
* 這不是一個文檔註釋,因爲不是以/**開頭 …
*
*/
function bac(){}

/**
* 這是一個文檔註釋,但與函數無關,因爲他沒放到函數前面 …
*
*/

function bac(){}

e) 文檔說明
/**
* 文件說明
* @author 作者
* @license License
* @version 1.0
* @link
* @final
*/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章