百度代码规范 -- PHP
生活随笔
收集整理的這篇文章主要介紹了
百度代码规范 -- PHP
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
來源:http://blog.csdn.net/sinat_34990639/article/details/62423641
php編碼規(guī)范
php標準委員會(php-styleguide@baidu.com):
許立強(TB-TD, 主席)賈春鑫(PS)廖慧琴(LBS RD)仇昊(VS)全偉(CS)
王巖(KS)顏玉剛(music-PD)張東進(SUMERU) 張振平(CID)王偉冰(貼吧-技術(shù)部)
參與規(guī)則制定:雷國強(GIS)李紅亮(GPM)王霄池(SCloud)張健(CS)許鵬(GIS)魯超伍(Mobile Search RD)杜偉(KS)孫笑(WD)v_sunhuai
- 1. 前言
- 2. 排版
- 3. 命名
- 4. 注釋
- 5. 編碼原則
- 6. 代碼性能
- 7. 工具支持
1. 前言
- 源碼文件必須采用UTF-8編碼,且不得有BOM頭,某些歷史遺留的GBK模塊除外。
- 編碼風格沒有太多的好壞之分, 最重要的是風格保持一致,編碼規(guī)范有助于規(guī)范我們編碼的風格,使代碼具有更好的可讀性。
- PHP在百度內(nèi)部應用得越來越廣泛,但是卻缺乏相應的編碼規(guī)范支持,編碼風格百家齊放,不利于我們代碼的維護和傳承, 根據(jù)大家平時的開發(fā)情況,制定了此PHP編碼規(guī)范。
- 每項規(guī)范前面的[強制]代表該規(guī)范需要強制執(zhí)行,[建議]代表推薦執(zhí)行但不強制。
- 注: 文中所有的變量名前面為了方便沒有加”$”, 示意即可。
- 本文檔風格約定部分可能跟你的喜好有沖突,請盡量用包容的心態(tài)來閱讀。有任何問題或建議,歡迎跟我們討論:?php-styleguide@baidu.com
2. 排版
2.1. [強制][PHP002] 程序塊要采用縮進風格編寫,縮進的空格數(shù)建議為4個,單模塊內(nèi)必須統(tǒng)一。
解釋
- 不同的縮進風格對代碼的可讀性影響很大,以tab為縮進單位在不同的tab step 下可讀性也相差很多,所以將縮進定為一個soft tab即4個空格,這樣在所有環(huán)境下縮進都會保持一致。
2.2. [建議]關(guān)鍵字與其后的左括號之間有一個空格,而函數(shù)名與左括號之間不應有任何字符包括空格。
解釋
- 雖然很多情況下編輯器的highlight已經(jīng)做了區(qū)分,但是從格式上區(qū)分關(guān)鍵字和函數(shù)適用于所有的情況。
2.3. [建議]開始的大括號位于一行的末尾,結(jié)束的括號位于最末一行后,且獨占一行。首括號也可另起一行,但一個模塊內(nèi)必須統(tǒng)一。
示例2.4. [強制] [PHP003] if/while等結(jié)構(gòu)體,即使只有一行,也必須加上花括號,不得寫成一行。
解釋
- 這樣做可讀性更好,并且方便修改。
2.5. [建議]一行代碼不得超過120個字節(jié),建議控制在80字節(jié)內(nèi);一個函數(shù)不得超過500行,建議控制在100行以內(nèi)。
解釋
- 代碼更美觀, 可讀性更好
2.6. [建議]else-if語句使用else if形式,不使用elseif形式。
2.7. [建議]函數(shù)名與其后的左括號之間不應有任何字符(包括空格) 函數(shù)調(diào)用的左括號與其第一個參數(shù)之間不應有任何字符(包括空格) 最后一個參數(shù)與右括號之間不應有任何字符(包括空格) 參數(shù)列表的逗號后面應有一個空格
示例2.8. [建議]避免由于對錯誤的條件做判斷帶來if的嵌套。
解釋
- 減少if/else嵌套, 更利于代碼邏輯的理解。
示例
- 不推薦的方式:
- if (a === false) { // error handle } else { if (b === false) { // handle } }
- 推薦的方式:
- if (a === false) { // error handle }if (b === false) { // handle }
2.9. [建議]如果過長的話需要另起一行。if 語句的條件若較多較長,應折行;新行以邏輯運算符起始,與第一行 if 左括號后的第一個字符對齊;折行后,每行條件具有獨立而明確的語義
解釋
- 這樣做邏輯更一目了然。
2.10. [建議]多行的”=”可能的話盡量用空格對齊。
示例2.11. [強制] [PHP009] Switch語句中每個case的break必須和case間有縮進。
示例2.12. [強制] [PHP008] 初始化array如果采用多行結(jié)構(gòu)時,數(shù)據(jù)項部分需要縮進,且最后一個數(shù)據(jù)項后面的逗號不可省略。
解釋
- 這樣做在修改代碼增加數(shù)據(jù)項的時候不容易出現(xiàn)語法錯誤。
2.13. [建議] 復雜的表達式, 使用括號表明優(yōu)先級, 而不完全依賴運算符優(yōu)先級。
示例
- 不推薦方式:
- if ($a && $b || $c + $b && $e) { }
- 推薦方式:
- if (($a && $b) || (($c + $b) && $e)){ }
2.14. [建議] 同一個代碼塊的變量定義, 應該盡可能集中在塊開始位置,提高可讀性。
2.15. [建議] 除模板外,不允許使用?>標記結(jié)尾, 避免其后誤加的字符干擾頁面渲染。
2.16. [建議] 產(chǎn)品線內(nèi)必須統(tǒng)一換行符的使用, 推薦“n”。
3. 命名
3.1. [強制] [PHP025] 全局變量以g_開頭。
解釋
- 全局變量對代碼影響很大,以g_開頭便能在代碼中一眼看出是全局變量。
3.2. [強制] [PHP004] 常量命名使用全部大寫字符,單詞之間以’_’連接。
示例3.3. [建議]對于代碼中的常量,建議用常量或define表示,不應直接寫在代碼中。
示例3.4. [強制] [PHP010] 關(guān)鍵字true、false、null必須小寫
3.5. [強制] [PHP026] 類method命名采用駝峰命名, 普通function采用過程函數(shù)風格命名。
示例
- 類method:
- public function getName() { }
- 普通function:
- function show_me_the_money() {}
3.6. [強制·]類成員變量和局部變量必須采用駝峰命名法,建議增加三字節(jié)的類型前綴:arr、str、int、bol、obj等
示例3.7. [建議]文件(除了類)命名使用小寫字母,單詞之間以’_’連接。
示例3.8. [建議]配置文件的名稱為配置文件名 + .conf.php, 不涉及類的都小寫通過”_”連接。
示例3.9. [建議]類名應以大寫字母開頭,每個單詞的首字母大寫。
示例3.10. [建議]final放在訪問控制符的前面、訪問控制符放在static的前面
示例4. 注釋
4.1. [建議]文件、函數(shù)、類以及成員變量都應包含注釋,關(guān)鍵代碼必須有注釋。
類文件/普通文件的注釋, 說明該文件的主要作用。
示例類的注釋, 說明該類的主要作用。
示例4.2. [強制] [PHP027] 不能使用#作為單行注釋, 多行注釋/ *?**/不能出現(xiàn)在同一行。
4.3. [強制] [PHP028] 函數(shù)必須通過param和return標記指明其參數(shù)和返回值。
4.4. [建議] 注釋需要遵守phpDocumentor等注釋規(guī)范,同一團隊內(nèi)部必須保持一致。
4.5. [建議] 必要的地方使用非文檔性注釋,提高代碼易讀性。
5. 編碼原則
5.1. [建議]對傳入或返回的參數(shù)進行類型檢查和顯式轉(zhuǎn)換。
示例5.2. [強制]對于函數(shù)返回值的判斷,特別是true/false, 必須用===或!==。
5.3. [強制] [PHP029] 生成對象時,必須使用new Classname(),不能用new Classname。
5.4. [強制]所有文件路徑都需要利用框架提供的宏寫成絕對路徑。
5.5. [建議]對于長時間運行的CLI程序,需要及時unset無用變量,尤其是PHP5.2上。
5.6. [強制]對于一些系統(tǒng)操作,使用php內(nèi)置的函數(shù)例如rename、touch等即可。盡量避免使用exec調(diào)用shell命令。
5.7. [建議]除非特殊情況,否則不允許使用require和include,而使用對應的require_once/include_once。
5.8. [建議]配置項與PHP代碼分離,不隨CVS/SVN發(fā)布
5.9. [強制]預定義變量一律使用短格式,即:$_POST、$_GET、$_SERVER、$_ENV等,不再使用長格式:$_HTTP_POST_VARS、$_HTTP_GET_VARS。
5.10. [強制]類文件名必須符合所用框架自動加載規(guī)范,常見的是PSR-0。
5.11. [建議]除模板外,盡量不要在php代碼中出現(xiàn)html標簽。
5.12. [建議]能用foreach的就不要用for,能用for的就不要用while。
5.13. [強制]每個前端訪問請求必須有且僅有一條notice日志。
5.14. [建議]數(shù)據(jù)庫寫操作必須有日志記錄;記錄條數(shù)應與操作一一對應。
5.15. [強制]文件更新操作,必須使用臨時文件+mv的方式,切忌直接寫在原文件。
5.16. [建議]字符串盡量用’ ‘而不是” “進行引用,一個是效率問題,一個是安全問題。
5.17. [強制] [PHP031] 所有的define語句,常量必須用’‘包括起來。
示例5.18. [建議]require/include后面不使用括號。
示例5.19. [強制] [PHP020] 函數(shù)允許使用默認參數(shù),但是默認參數(shù)需要放到參數(shù)列表最后面。
5.20. [強制] [PHP032] 所有的全局變量應該寫在函數(shù)的最開頭,并且和后面的代碼以空行隔開。
示例5.21. [強制] [PHP033] 禁止使用and, or, 而是使用&&, ||
5.22. [建議]避免使用$i, $j這樣無意義的變量名, 除非是用作循環(huán)計數(shù)變量。
5.23. [建議]避免使用php邏輯代碼作為配置, 以降低改配置的危險性。
5.24. [建議]進行==判斷時,建議把常量放在前面, 避免誤寫成賦值操作。
示例
- 不推薦形式:
- if ($a == 1){ }
- 推薦形式:
- if (1 == $a){ }
5.25. [建議]使用變量前賦初值,提高可讀性,也可避免誤用別處定義的同名變量。
5.26. [建議]錯誤碼使用統(tǒng)一文件集中配置,并且使用常量,而不應裸寫數(shù)字
5.27. [建議]對于無需子類化的實體類以及不應重載的方法使用final關(guān)鍵字限定。
5.28. [強制]對于不應實例化的父類使用abstract關(guān)鍵字限定。
5.29. [建議]避免重載父類的static成員,這在5.2.x存在問題。
5.30. [建議]對于僅用于某個函數(shù)或類的全局變量,使用static的局部變量或者類成員變量代替。
5.31. [建議]在頭文件中用$GLOBALS定義全局變量,避免局部包含導致的作用域問題。
6. 代碼性能
6.1. [強制] [PHP034] 把重復調(diào)用放在循環(huán)體外。
示例
- 不推薦形式:
- for($i = 0; $i < count($arr); $i++)
- 推薦形式:
- $arrCount = count($arr); for($i = 0; $i < $arrCount; $i++)
5. 工具支持
對所有標記的有“eagle支持”的規(guī)則,大家可以本地調(diào)用客戶端檢查代碼是否符合這部分規(guī)則,另外在發(fā)起代碼評審(cooder)時也將自動觸發(fā)檢查,結(jié)果會以行間評論的形式插入到代碼評審中,幫助作者檢查代碼、幫助評審人評審代碼,詳細內(nèi)容點擊查看
總結(jié)
以上是生活随笔為你收集整理的百度代码规范 -- PHP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 杨柳青(说一说杨柳青的简介)
- 下一篇: intersection(说一说inte