PHP編碼規(guī)范文檔
作者: _Approaching 分類: PHP 發(fā)布于: 2012-03-16 23:10 瀏覽:4,797 沒有評論
大半天時(shí)間整理的PHP編碼規(guī)范…
一、命名規(guī)范:
1.?常量的命名
1)?字母,全部大寫,使用“_”?分隔單詞。
如:DEFINE(“PHP_DEMO_PRINT”,”hEllo?world”);
2.?變量的命名
1)?使用駝峰結(jié)構(gòu)命名,即以小寫字母開頭,從第二個(gè)單詞開始,每個(gè)單詞的第一個(gè)字母大寫。
如:$getElement=”myodbc”;
2)?全局變量以“g_”開頭,非全局變量不要以“g_”開頭
如:$g_i;
3)?所有的“臨時(shí)”變量使用完畢后必須unset。
4)?不允許出現(xiàn)字母完全相同,僅大小寫不同的命名。
5)?不允許在命名的結(jié)尾使用下劃線。
6)?不要出現(xiàn)單字母的變量,如i,j,k(只有在控制循環(huán)數(shù)時(shí)且循環(huán)代碼條數(shù)在3條以內(nèi),才可以考慮使用)
7)?變量名中不能出現(xiàn)數(shù)字。
8)?變量名最好能表示出是數(shù)值型還是字符串型變量。
如:$myCount_i表示數(shù)值型變量,$myString_s表示字符串。
9)?如果有計(jì)算限定符,把限定詞加到名字的最后。
如:$calTimeStart?、?$calTimeEnd.
3.?函數(shù)的命名
1)?函數(shù)名全部小寫,單詞之間可以使用下劃線。
2)?存取對象的函數(shù)名使用?set_xxx()?和get_xxx()?形式。
3)?布爾類型的函數(shù)名可以使用?isxxx()?形式。
4)?函數(shù)名中不能出現(xiàn)數(shù)字。
4.?類命名
1)?類名用第一個(gè)字母大寫的英文正常語序準(zhǔn)確描述類的含義。如:Employee。
2)?類的方法命名規(guī)則與函數(shù)的命名規(guī)則一致。
3)?類的屬性名采用全字母小寫。
5.?文件的命名
1)?文件名字符全部采用小寫
2)?文件名稱要能反映出其內(nèi)容及功能。
如:儲(chǔ)存有類的文件,name.class.php;存有函數(shù)的文件可采用name.func.php或name.inc.php來命名;配置文件,name.cfg.php或者config.inc.php?。
二、注釋規(guī)范:
1.?變量的注釋
1)?變量的同行后空一格使用雙斜線注釋。
如:$myDemo?=?‘a?demo’;?//這是行內(nèi)注釋
2.?函數(shù)與函數(shù)體的注釋
/*
@作者:xxxx、bbb
*/
//描述函數(shù)的功能和返回值和引用方法
function??ff(aaa,?bbb)??{
……
//?普通夾雜在代碼里的單行注釋
……
return?false;
}
3.?文件的注釋
1)?文件功能、創(chuàng)建人信息、時(shí)間。
2)?已知的Bug。當(dāng)然最好是修正所有錯(cuò)誤,但可能暫時(shí)還沒有辦法修正錯(cuò)誤,或暫時(shí)沒有精力去修改
3)?開發(fā)和維護(hù)文件的歷史列表。記錄每一次修改的作者、日期、修改的內(nèi)容
4)?對主要的算法必須加以解釋說明,主要的流程必須給出引導(dǎo)性的說明
5)?標(biāo)準(zhǔn)格式
/** *?@description?描述類的功能、用途、現(xiàn)存BUG,設(shè)計(jì)方法。 *?@author?作者姓名 *?@version?最后修改日期(日期格式建議采用:年–月–日格式,例如:2008-04-05) */ 如果對已經(jīng)版本化的類進(jìn)行了修改,需要按照如下格式為每一次修改附加修改歷史記錄: *?@modify *?修改人?+?修改日期(日期格式建議采用:年–月–日格式,例如:2008-04-05) *?修改說明
|
三、代碼書寫風(fēng)格
1.?總原則
1)?一行代碼盡量簡短,并且保證一行代碼只做一件事。
2)?使用圓括號來界定操作的順序。不要讓別人判斷復(fù)雜的操作優(yōu)先級。
3)?合理使用空行,劃分邏輯處理。
4)?代碼縮進(jìn)使用TAB鍵(設(shè)定四個(gè)空格)。
5)?建議遵循三十秒原則。如果另一個(gè)程序員無法在三十秒之內(nèi)了解你的函數(shù)做了什么,如何做以及為什么要這樣做,那就說明你的代碼是難于維護(hù)的,必須得到提高。
2.?控制結(jié)構(gòu)
1)?If?規(guī)范:?
1.?else?后面的if,另起一行?
2.?把對比常量,放在等式左邊?
3.?分支要加上注釋,注釋前面加一個(gè)(TAB)縮進(jìn)
if?(6?==?$errorNum)??{ //注釋1
..
}??else??{
if?(5?==?$num)??{ //注釋2
…
}??else??{
…
}
}
2)?Switch規(guī)范:?
switch?(…)?{
case?1: //分支1注釋
…?
//?這里沒有break,直接轉(zhuǎn)到下個(gè)case,須要加注釋?
case?2: {??//分支2注釋?
$v?=?get_week_number(); //?創(chuàng)立變量,在{}之中?
…?
}?
break;?
default:?
}
3)?For規(guī)范:?
For($i=1;$i<=3;$i++)??{
……
}
4)?While?規(guī)范:?
While?($i<=5)?{
….
}
5)?Foreach??規(guī)范:?
Foreach?($arr??as??$v?=>?$k)??{
….
}
四、代碼書寫風(fēng)格
1.?使用$row[‘id’]方式取數(shù)據(jù),不要使用$row[id]方式。
2.?純字符串使用單引號包含。
3.?刪除未使用的變量
4.?執(zhí)行for循環(huán)之前確定最大循環(huán)數(shù),不要每循環(huán)一次都計(jì)算最大值。
5.?循環(huán)內(nèi)部不要聲明變量,尤其是大變量:對象(語言通用)。
6.?執(zhí)行字符串替換前用strpos()函數(shù)判斷是否存在后再執(zhí)行替換函數(shù)。
7.?用foreach代替while遍歷數(shù)組。遍歷數(shù)組時(shí)foreach的效率明顯高于while循環(huán)
8.?str_replace函數(shù)比preg_replace函數(shù)快,但strtr函數(shù)的效率是str_replace函數(shù)的四倍
9.?當(dāng)執(zhí)行變量$i的遞增或遞減時(shí),$i++會(huì)比++$i慢一些。這種差異是PHP特有的
10.?用@屏蔽錯(cuò)誤消息的做法非常低效。
本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進(jìn)行許可,轉(zhuǎn)載時(shí)請注明出處及相應(yīng)鏈接。
本文永久鏈接: http://yjfs.org.cn/php-coding-standards-document.html