《PHP實(shí)例:培養(yǎng)自己的php編碼規(guī)范》要點(diǎn):
本文介紹了PHP實(shí)例:培養(yǎng)自己的php編碼規(guī)范,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
為什么我們要培養(yǎng)本身的編碼規(guī)范?PHP實(shí)例
我們寫(xiě)代碼的時(shí)候,一個(gè)好的編碼規(guī)范,對(duì)我們來(lái)說(shuō)能夠起到很多意向不到的效果.至少會(huì)有一下的好處:
PHP實(shí)例
1、提高我們的編碼效率.整齊劃一的代碼便利我們進(jìn)行復(fù)制粘貼嘛!
2、提高代碼的可讀性.
3、顯示我們專業(yè).別人看到了我們的代碼,發(fā)現(xiàn)整個(gè)代碼的書(shū)寫(xiě)流程都整齊劃一,瞬間逼格就上去了!
4、便利團(tuán)隊(duì)協(xié)同工作.大家使用同一的規(guī)范,這樣就消除了五花八分的書(shū)寫(xiě)方式,同一協(xié)調(diào)!PHP實(shí)例
編碼規(guī)范包括兩大塊,代碼規(guī)范和注釋規(guī)范PHP實(shí)例
其實(shí)我們所寫(xiě)的php腳本,其實(shí)也就是由兩大塊組成的,即對(duì)代碼的書(shū)寫(xiě)、對(duì)代碼的注釋!不同的框架,甚至不同的公司,對(duì)這方面都會(huì)有所不同,這里只是已將之言,僅僅是對(duì)本身的書(shū)寫(xiě)規(guī)范進(jìn)行一個(gè)總結(jié)!希望能對(duì)其他的朋友以啟示PHP實(shí)例
1、代碼的書(shū)寫(xiě)規(guī)范PHP實(shí)例
文件夾的命名:
PHP實(shí)例
文件夾同一使用小寫(xiě)字母.如存放控制器的文件夾,直接命名為controller即可PHP實(shí)例
文件的命名:
PHP實(shí)例
如果是類文件的話,那么文件的命名應(yīng)該同類名稱堅(jiān)持一致,統(tǒng)一使用大駝峰.如Session.class.php , 對(duì)應(yīng)類名稱為Session,
如果是普通的工具腳本,那么統(tǒng)一使用小駝峰,如common.phpPHP實(shí)例
類名稱的命名:
PHP實(shí)例
類名稱同一使用大駝峰,Cookie類PHP實(shí)例
辦法名的命名:
PHP實(shí)例
統(tǒng)一使用小駝峰,一般使用 動(dòng)詞 + 名次 的形式來(lái)描述該辦法的功能,如sendMessage,發(fā)送短信.
在面向?qū)ο笾?遵循同樣的規(guī)則,但是個(gè)別地方有所區(qū)別:
PHP實(shí)例
public getUserName() protected _getTotalAmount() private _setBlanceAmount()
變量的命名規(guī)范:
PHP實(shí)例
關(guān)于變量,我們必要多說(shuō)幾點(diǎn):
1、無(wú)論在面向?qū)ο筮€是非面向?qū)ο蟮恼Z(yǔ)法中,變量統(tǒng)一使用小駝峰,如:$workYears.
但是在面向?qū)ο笾杏钟兴煌?public 、 protected 、 private ,protected或者private屬性的時(shí)候,前面加上了 _ 作為區(qū)別PHP實(shí)例
public $startPosition = 1; protected $_salaryAmount =1000; private $_sex = 'formale';
2、如果是常量的話,統(tǒng)一使用大寫(xiě),中間使用下劃線進(jìn)行分割.PHP實(shí)例
define('CURRENT_SCRIPT', 'index.php'); const TRANSACTION_TYPE = 'income';
3、全局變量,使用大駝峰,前綴加上 _ ,所有的單詞首字母大寫(xiě).因?yàn)橹酪粋€(gè)變量的作用域是非常重要的,所以局部變量和全局變量應(yīng)該很明顯的進(jìn)行分開(kāi)!PHP實(shí)例
$_System_Config;PHP實(shí)例
$_Root_Path;
PHP實(shí)例
縮進(jìn)符
PHP實(shí)例
關(guān)于編碼的縮進(jìn)符號(hào),我們統(tǒng)一使用制表符縮進(jìn)!也許有的人會(huì)問(wèn)為什么不適用空格縮進(jìn)的呢?
原因很簡(jiǎn)單,大部分的編纂器都支持制表符等于多少個(gè)空格,而使用空格就沒(méi)得調(diào)了!PHP實(shí)例
運(yùn)算符號(hào)
PHP實(shí)例
所有的兩元運(yùn)算符號(hào),都應(yīng)該前后使用空格進(jìn)行
PHP實(shí)例
$name = 'zero'; $age > 18 ? 'adult' : 'children';
常見(jiàn)的流程語(yǔ)句規(guī)劃
PHP實(shí)例
我們約定,所有的流程語(yǔ)句的花括號(hào)都單獨(dú)占據(jù)一行.理由:如果遇到較為復(fù)雜的業(yè)務(wù)邏輯,花括號(hào)會(huì)出現(xiàn)很多的嵌套,這樣一來(lái)我們會(huì)混淆個(gè)個(gè)對(duì)應(yīng)的花括號(hào)!
PHP實(shí)例
1、分支語(yǔ)句PHP實(shí)例
if($age >= 18 && $age <= 30) { echo 'young man'; } else if($age > 30 && $age <= 60) { echo 'middle aged'; } else { echo 'old man'; } //下面這段代碼高手我們一個(gè)問(wèn)題,在if語(yǔ)句中,即使在可以不要花括號(hào)的情況下,花括號(hào)也是要寫(xiě)上的 if($age > 60) { echo 'I am very old'; } switch($status) { case 'forbiden': echo 'login forbidden'; break; case 'normal': echo 'login in'; break; default: echo 'status is wrong' : break; }
2、循環(huán)語(yǔ)句PHP實(shí)例
while($condition) { statesments......; } foreach($arrayList as $arrayKey => $arrayItem) { states......; } do { statements......; } while($condition) for($start; condition; changenumber) { statements......; }
2、注釋的書(shū)寫(xiě)規(guī)范PHP實(shí)例
很多人說(shuō)好的代碼是不需要注釋的,其實(shí),個(gè)人認(rèn)為這是一句很扯淡的話(也可能他是對(duì)的,除非整個(gè)團(tuán)隊(duì)就他一個(gè)人,他經(jīng)辦了一切,不用看別人的代碼).PHP實(shí)例
個(gè)人的觀點(diǎn)是:多寫(xiě)注釋,無(wú)論是對(duì)團(tuán)隊(duì)的其他人,還是對(duì)本身都是非常友好的!PHP實(shí)例
根據(jù)個(gè)人的經(jīng)驗(yàn)來(lái)看,注釋至少有以下幾個(gè)作用:
PHP實(shí)例
1、有利于提高代碼的可讀性,畢竟讀你的注釋要比讀你的代碼要容易的多!
2、有利于規(guī)劃自己的代碼布局!之所以這么說(shuō),是因?yàn)楹痛a注釋的種類有關(guān).“有利于代碼的布局”,這種看著有點(diǎn)懸的事,光說(shuō)是說(shuō)不明白的,我們需要實(shí)實(shí)在在的例子做支撐!
3、由于我們的注釋規(guī)范是依照phpdocumentor的要求,所以通過(guò)這個(gè)工具,還可以生成一份對(duì)代碼的總體說(shuō)明,相當(dāng)于一個(gè)使用說(shuō)明書(shū)!gPHP實(shí)例
代碼注釋的種類
PHP實(shí)例
1、塊注釋
塊注釋,個(gè)人認(rèn)為主要用在了三個(gè)地方.對(duì)php腳本的描述、對(duì)一個(gè)大的功能模塊的描述、在一行之內(nèi)不能寫(xiě)完注釋的時(shí)候,也應(yīng)該放在塊注釋中PHP實(shí)例
2、行注釋
行注釋,個(gè)人認(rèn)為他是配合塊注釋進(jìn)行工作的!一般用于描述一個(gè)大的功能模塊的具體細(xì)節(jié)!PHP實(shí)例
實(shí)戰(zhàn)的案例
PHP實(shí)例
關(guān)于phpdocumentor語(yǔ)法的具體使用細(xì)節(jié),這里就不多說(shuō)了,官網(wǎng)上說(shuō)的再清楚不過(guò)了PHP實(shí)例
PHP實(shí)例
從上面的例子中我們可以看一下代碼的布局大致是怎么回事,但是還必要我們?cè)趯?shí)踐中慢慢摸索PHP實(shí)例
下面附上一些php的編程規(guī)范,給大家參考下PHP實(shí)例
一、文件標(biāo)記:PHP實(shí)例
?1.所有php文件,其代碼標(biāo)記均采用完整php標(biāo)簽,不建議使用短標(biāo)簽(短標(biāo)簽容易和xml混淆,php從5.4開(kāi)始默認(rèn)不支持短標(biāo)記).PHP實(shí)例
?2.對(duì)于只有php的代碼文件,建議省略結(jié)尾處的‘?>'.這是為了防止多余的空格或其他字符影??????? 響到代碼.PHP實(shí)例
二、文件和目錄命名PHP實(shí)例
?1.程序文件名和目錄名均采用有意義的英文命名,不使用拼音和無(wú)意義的字母,只允許出現(xiàn)字母、數(shù)字、下劃線和中劃線字? 符,同時(shí)必需以‘.php'結(jié)尾(模板文件除外),多個(gè)詞間使用駝峰命名法.PHP實(shí)例
??? 例://類統(tǒng)一采用:DemoTest.class.phpPHP實(shí)例
????????? //接口統(tǒng)一采用:DemoTest.interface.phpPHP實(shí)例
????????? //其他依照各自的方式:demoTest.{style}.phpPHP實(shí)例
三、文件目錄結(jié)構(gòu)PHP實(shí)例
規(guī)范的目錄結(jié)構(gòu)有助于團(tuán)隊(duì)協(xié)作開(kāi)發(fā)和后期維護(hù).PHP實(shí)例
――app??????????? //獨(dú)立的應(yīng)用PHP實(shí)例
――class????????? //單個(gè)的類文件,共用的類文件PHP實(shí)例
――conf/inc??? //配置文件或目錄PHP實(shí)例
――data????????? //數(shù)據(jù)文件或目錄PHP實(shí)例
――doc?????????? //程序相關(guān)文檔PHP實(shí)例
――htdocs?????? //document_rootPHP實(shí)例
――images?????? //所有圖片文件存放路徑PHP實(shí)例
――css??????????? //css文件PHP實(shí)例
――js?????????????? //js文件PHP實(shí)例
――lib????????????? //共用類庫(kù)PHP實(shí)例
――template??? //模板文件PHP實(shí)例
――tmp??????????? //臨時(shí)文件目錄PHP實(shí)例
――cache??? //緩存文件PHP實(shí)例
――session? //SESSION文件PHP實(shí)例
――template_c??? //編譯后的模板文件PHP實(shí)例
――otherPHP實(shí)例
――upload????? //上傳文件PHP實(shí)例
――manage??? //后臺(tái)管理文件目錄PHP實(shí)例
四、命名規(guī)范PHP實(shí)例
1.變量命名:php中變量區(qū)分大小寫(xiě),一個(gè)有效的變量名由數(shù)字、字母或下劃線開(kāi)頭,后面跟任意數(shù)量的字母、數(shù)字、下劃線.PHP實(shí)例
??? a)程序整體以駝峰命名法,以小寫(xiě)字母開(kāi)始,同時(shí)命名要有意義.(function displayName())PHP實(shí)例
??? b)PHP全局變量鍵值兩邊都有‘_',中間用駝峰命名法命名.($_GLOBAL['_beginTime_'])PHP實(shí)例
??? c)普通變量整體采用駝峰命名法,建議在變量前加表示類型的前綴.不確定類型的以大寫(xiě)字符開(kāi)頭.PHP實(shí)例
??? d)函數(shù)名要盡量有意義,盡量縮寫(xiě).PHP實(shí)例
2.類及接口命名:PHP實(shí)例
??? a)以大寫(xiě)字母開(kāi)頭.PHP實(shí)例
??? b)多個(gè)單詞組成的變量名,單詞之間不用間隔,各個(gè)單詞首字母大寫(xiě).PHP實(shí)例
??? c)類名與類文件名堅(jiān)持一致.PHP實(shí)例
??? d)程序中所有的類名唯一.PHP實(shí)例
??? e)抽象類應(yīng)以Abstract開(kāi)頭.PHP實(shí)例
??? 接口命名規(guī)則:PHP實(shí)例
??????? i)采用和類相同的命名規(guī)則,但在其命名前加‘i'字符,表示接口.PHP實(shí)例
??????? ii)盡量堅(jiān)持和實(shí)現(xiàn)它的類名一致.PHP實(shí)例
3.數(shù)據(jù)庫(kù)命名:在數(shù)據(jù)庫(kù)相關(guān)命名中,一律不出現(xiàn)大寫(xiě).PHP實(shí)例
??? a)表名均使用小寫(xiě)字母.PHP實(shí)例
??? b)表名使用同一的前綴且前綴不能為空.PHP實(shí)例
??? c)對(duì)于多個(gè)單詞組成的表名,使用‘_'間隔.PHP實(shí)例
??? d)表字段命名規(guī)則.PHP實(shí)例
??????????? i)全部使用小寫(xiě)字母.PHP實(shí)例
??????????? ii)多個(gè)單詞不用下劃線分割.PHP實(shí)例
??????????? iii)給常用字段加上表名首字母做前綴.PHP實(shí)例
??????????? iv)避免使用關(guān)鍵字和保存字.PHP實(shí)例
五、注釋規(guī)范PHP實(shí)例
1.程序注釋:寫(xiě)在代碼前面而不是后面,單行代碼依照習(xí)慣寫(xiě)在代碼尾部;大段注釋采用/**/的方式,通常為文件或函數(shù)的頂部,代碼內(nèi)部使用'//';注釋不宜太多;代碼注釋?xiě)?yīng)該描述為什么而不是做什么,給代碼閱讀者提供最主要的信息.PHP實(shí)例
2.文件注釋:文件注釋一般放在文件的頂部,包含本程序的描述、作者、項(xiàng)目名稱、文件名稱、時(shí)間日期、版本信息、重要的使用說(shuō)明(類的調(diào)用,注意事項(xiàng)等).版本更改要修改版本號(hào),并加上mofify注釋.PHP實(shí)例
3.類和接口注釋:依照一般的習(xí)慣,一個(gè)文件只包含一個(gè)類.PHP實(shí)例
4.辦法和函數(shù)注釋:辦法和函數(shù)的注釋寫(xiě)在前面,通常需要表明信息的主要可見(jiàn)性、參數(shù)類型和返回值類型.PHP實(shí)例
??? /**PHP實(shí)例
??? *??? 連接數(shù)據(jù)庫(kù)PHP實(shí)例
??? *??? @param string $dbhost??? 數(shù)據(jù)庫(kù)服務(wù)器地址PHP實(shí)例
??? *??? @param string $dbuser??? 數(shù)據(jù)庫(kù)用戶名PHP實(shí)例
??? *??? @param string $dbpwd??? 數(shù)據(jù)庫(kù)暗碼PHP實(shí)例
??? */PHP實(shí)例
六、代碼風(fēng)格PHP實(shí)例
1.縮進(jìn)和空格:使用4個(gè)空格做為縮進(jìn),不使用Tab鍵;變量賦值時(shí),等號(hào)兩邊留出空格.($url = '$_GET['url']';)PHP實(shí)例
2.語(yǔ)句斷行:盡量保證程序語(yǔ)句一行即一句;盡量不要使一行的代碼過(guò)長(zhǎng),80個(gè)字符以內(nèi);如果一行的代碼太長(zhǎng),請(qǐng)使用類似于‘.='方式斷行連接;執(zhí)行數(shù)據(jù)庫(kù)的sql語(yǔ)句操作時(shí),盡量不要再函數(shù)內(nèi)寫(xiě)sql語(yǔ)句,而先用變量定義sql語(yǔ)句,然后在執(zhí)行操作的函數(shù)中調(diào)用定義的變量.PHP實(shí)例
3.更好的習(xí)慣:在代碼中使用下面列舉的辦法,可以使代碼更優(yōu)雅.PHP實(shí)例
??????? 1):多使用php中已經(jīng)存在的常量,而不要本身定義.PHP實(shí)例
??????????? 例://換行PHP實(shí)例
????????????????? echo $msg."\r\n";PHP實(shí)例
????????????????? echo $msg,PHP_EOL;PHP實(shí)例
??????????????? php中PHP_EOL是一個(gè)預(yù)定義常量,表示一行結(jié)束,隨著所使用系統(tǒng)不同,使用PHP_EOL代碼可移植性更高PHP實(shí)例
??????? 2):在echo中使用逗號(hào)做連接符,比用‘.'做連接符代碼更美觀.PHP實(shí)例
??????? 3):?jiǎn)我?hào)的效率高于雙引號(hào),但二者在使用上有區(qū)別,學(xué)會(huì)使用printf函數(shù).PHP實(shí)例
??????????? 例://echoPHP實(shí)例
??????????????? echo? '每個(gè)'.$scholl.'大約有'.floor($avg).'個(gè)學(xué)生';PHP實(shí)例
????????????????? //printfPHP實(shí)例
?????????????? $format = '每個(gè)%s大于有$d個(gè)學(xué)生';PHP實(shí)例
??????????????? printf($format,$school,$avg);PHP實(shí)例
??????? 4)? :詳細(xì)的注釋PHP實(shí)例
??????? 5):不要 濫用語(yǔ)法糖,語(yǔ)法糖便是語(yǔ)言中的潛規(guī)則,即不具備普遍代表性的語(yǔ)法.PHP實(shí)例
歡迎參與《PHP實(shí)例:培養(yǎng)自己的php編碼規(guī)范》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/8642.html