日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

百度代码规范 -- PHP

發布時間:2024/9/20 php 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 百度代码规范 -- PHP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源:http://blog.csdn.net/sinat_34990639/article/details/62423641

php編碼規范

php標準委員會(php-styleguide@baidu.com):

許立強(TB-TD, 主席)賈春鑫(PS)廖慧琴(LBS RD)仇昊(VS)全偉(CS)

王巖(KS)顏玉剛(music-PD)張東進(SUMERU) 張振平(CID)王偉冰(貼吧-技術部)

參與規則制定:雷國強(GIS)李紅亮(GPM)王霄池(SCloud)張健(CS)許鵬(GIS)魯超伍(Mobile Search RD)杜偉(KS)孫笑(WD)v_sunhuai

  • 1. 前言
  • 2. 排版
  • 3. 命名
  • 4. 注釋
  • 5. 編碼原則
  • 6. 代碼性能
  • 7. 工具支持
? ? 展示eagle支持規則

1. 前言

  • 源碼文件必須采用UTF-8編碼,且不得有BOM頭,某些歷史遺留的GBK模塊除外。
  • 編碼風格沒有太多的好壞之分, 最重要的是風格保持一致,編碼規范有助于規范我們編碼的風格,使代碼具有更好的可讀性。
  • PHP在百度內部應用得越來越廣泛,但是卻缺乏相應的編碼規范支持,編碼風格百家齊放,不利于我們代碼的維護和傳承, 根據大家平時的開發情況,制定了此PHP編碼規范。
  • 每項規范前面的[強制]代表該規范需要強制執行,[建議]代表推薦執行但不強制。
  • 注: 文中所有的變量名前面為了方便沒有加”$”, 示意即可。
  • 本文檔風格約定部分可能跟你的喜好有沖突,請盡量用包容的心態來閱讀。有任何問題或建議,歡迎跟我們討論:?php-styleguide@baidu.com

2. 排版

2.1. [強制][PHP002] 程序塊要采用縮進風格編寫,縮進的空格數建議為4個,單模塊內必須統一。

解釋

  • 不同的縮進風格對代碼的可讀性影響很大,以tab為縮進單位在不同的tab step 下可讀性也相差很多,所以將縮進定為一個soft tab即4個空格,這樣在所有環境下縮進都會保持一致。

2.2. [建議]關鍵字與其后的左括號之間有一個空格,而函數名與左括號之間不應有任何字符包括空格。

解釋

  • 雖然很多情況下編輯器的highlight已經做了區分,但是從格式上區分關鍵字和函數適用于所有的情況。
示例
關鍵字 if (a > b) 函數名 funcA()

2.3. [建議]開始的大括號位于一行的末尾,結束的括號位于最末一行后,且獨占一行。首括號也可另起一行,但一個模塊內必須統一。

示例
if (a > b) {}

2.4. [強制] [PHP003] if/while等結構體,即使只有一行,也必須加上花括號,不得寫成一行。

解釋

  • 這樣做可讀性更好,并且方便修改。
示例
if (a > b) { a = 1; }

2.5. [建議]一行代碼不得超過120個字節,建議控制在80字節內;一個函數不得超過500行,建議控制在100行以內。

解釋

  • 代碼更美觀, 可讀性更好

2.6. [建議]else-if語句使用else if形式,不使用elseif形式。

2.7. [建議]函數名與其后的左括號之間不應有任何字符(包括空格) 函數調用的左括號與其第一個參數之間不應有任何字符(包括空格) 最后一個參數與右括號之間不應有任何字符(包括空格) 參數列表的逗號后面應有一個空格

示例
funcA(a, b, c) {}

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 左括號后的第一個字符對齊;折行后,每行條件具有獨立而明確的語義

解釋

  • 這樣做邏輯更一目了然。
示例
if (a > b && c > d && e > f && h > j && z > x) {}

2.10. [建議]多行的”=”可能的話盡量用空格對齊。

示例
a = 1; ab = 2; abc = 3;

2.11. [強制] [PHP009] Switch語句中每個case的break必須和case間有縮進。

示例
case ‘A’: a = 2; break;

2.12. [強制] [PHP008] 初始化array如果采用多行結構時,數據項部分需要縮進,且最后一個數據項后面的逗號不可省略。

解釋

  • 這樣做在修改代碼增加數據項的時候不容易出現語法錯誤。
示例
$a = array( 'a' => 'b', 'b' => 'c', 'c' => 'd', );

2.13. [建議] 復雜的表達式, 使用括號表明優先級, 而不完全依賴運算符優先級。

示例

  • 不推薦方式:
    if ($a && $b || $c + $b && $e) { }
  • 推薦方式:
    if (($a && $b) || (($c + $b) && $e)){ }

2.14. [建議] 同一個代碼塊的變量定義, 應該盡可能集中在塊開始位置,提高可讀性。

2.15. [建議] 除模板外,不允許使用?>標記結尾, 避免其后誤加的字符干擾頁面渲染。

2.16. [建議] 產品線內必須統一換行符的使用, 推薦“n”。

3. 命名

3.1. [強制] [PHP025] 全局變量以g_開頭。

解釋

  • 全局變量對代碼影響很大,以g_開頭便能在代碼中一眼看出是全局變量。
示例
g_count;

3.2. [強制] [PHP004] 常量命名使用全部大寫字符,單詞之間以’_’連接。

示例
PAGE_NUM

3.3. [建議]對于代碼中的常量,建議用常量或define表示,不應直接寫在代碼中。

示例
define('PAGE_NUM', 3);

3.4. [強制] [PHP010] 關鍵字true、false、null必須小寫

3.5. [強制] [PHP026] 類method命名采用駝峰命名, 普通function采用過程函數風格命名。

示例

  • 類method:
    public function getName() { }
  • 普通function:
    function show_me_the_money() {}

3.6. [強制·]類成員變量和局部變量必須采用駝峰命名法,建議增加三字節的類型前綴:arr、str、int、bol、obj等

示例
$strName, $intAge

3.7. [建議]文件(除了類)命名使用小寫字母,單詞之間以’_’連接。

示例
show_lemma.php

3.8. [建議]配置文件的名稱為配置文件名 + .conf.php, 不涉及類的都小寫通過”_”連接。

示例
good_version.conf.php

3.9. [建議]類名應以大寫字母開頭,每個單詞的首字母大寫。

示例
ActionController

3.10. [建議]final放在訪問控制符的前面、訪問控制符放在static的前面

示例
final public static function getInstance(){ }

4. 注釋

4.1. [建議]文件、函數、類以及成員變量都應包含注釋,關鍵代碼必須有注釋。

類文件/普通文件的注釋, 說明該文件的主要作用。

示例
"A simple class describing employees" 說明類文件的主要作用。 "@package Employee" 說明namespace(如果有) "@author George Schlossnagle" 說明作者信息/*** A simple class describing employees** @package Employee* @author George Schlossnagle*/

類的注釋, 說明該類的主要作用。

示例
"An example of documenting a class" 說明類的主要作用。 "The employees annual salary" 說明變量的作用。 "@var number" 說明變量的類型。 "The class constructor" 說明方法的作用。 "@param" 說明參數類型。 "@access" 說明訪問權限。 "@return" 說明返回值。/*** An example of documenting a class*/ class Employee {/*** @var string*/private $name;/*** The employees annual salary* @var number*/private $salary;/*** @var number*/private $employee_id;/*** The class constructor* @param number*/public function Employee($employee_id = false) {if ($employee_id) {$this->employee_id = $employee_id;$this->_fetchInfo();}}/*** Fetches info for employee** @access private*/private function fetchInfo() {$query = "SELECT name,salaryFROM employeesWHERE employee_id = $this->employee_id";$result = mysql_query($query);list($this->name, $this->department_id) = mysql_fetch_row($result);}/*** Returns the monthly salary for the employee* @return number Monthly salary in dollars*/public function monthlySalary() {return $this->salary/12;} }

4.2. [強制] [PHP027] 不能使用#作為單行注釋, 多行注釋/ *?**/不能出現在同一行。

4.3. [強制] [PHP028] 函數必須通過param和return標記指明其參數和返回值。

4.4. [建議] 注釋需要遵守phpDocumentor等注釋規范,同一團隊內部必須保持一致。

4.5. [建議] 必要的地方使用非文檔性注釋,提高代碼易讀性。

5. 編碼原則

5.1. [建議]對傳入或返回的參數進行類型檢查和顯式轉換。

示例
$intSalary = (int) $salary;

5.2. [強制]對于函數返回值的判斷,特別是true/false, 必須用===或!==。

5.3. [強制] [PHP029] 生成對象時,必須使用new Classname(),不能用new Classname。

5.4. [強制]所有文件路徑都需要利用框架提供的宏寫成絕對路徑。

5.5. [建議]對于長時間運行的CLI程序,需要及時unset無用變量,尤其是PHP5.2上。

5.6. [強制]對于一些系統操作,使用php內置的函數例如rename、touch等即可。盡量避免使用exec調用shell命令。

5.7. [建議]除非特殊情況,否則不允許使用require和include,而使用對應的require_once/include_once。

5.8. [建議]配置項與PHP代碼分離,不隨CVS/SVN發布

5.9. [強制]預定義變量一律使用短格式,即:$_POST、$_GET、$_SERVER、$_ENV等,不再使用長格式:$_HTTP_POST_VARS、$_HTTP_GET_VARS。

5.10. [強制]類文件名必須符合所用框架自動加載規范,常見的是PSR-0。

5.11. [建議]除模板外,盡量不要在php代碼中出現html標簽。

5.12. [建議]能用foreach的就不要用for,能用for的就不要用while。

5.13. [強制]每個前端訪問請求必須有且僅有一條notice日志。

5.14. [建議]數據庫寫操作必須有日志記錄;記錄條數應與操作一一對應。

5.15. [強制]文件更新操作,必須使用臨時文件+mv的方式,切忌直接寫在原文件。

5.16. [建議]字符串盡量用’ ‘而不是” “進行引用,一個是效率問題,一個是安全問題。

5.17. [強制] [PHP031] 所有的define語句,常量必須用’‘包括起來。

示例
define('PAGE_NUM', 3);

5.18. [建議]require/include后面不使用括號。

示例
require_once?"a.php";

5.19. [強制] [PHP020] 函數允許使用默認參數,但是默認參數需要放到參數列表最后面。

5.20. [強制] [PHP032] 所有的全局變量應該寫在函數的最開頭,并且和后面的代碼以空行隔開。

示例
function a() {global g_count;global g_time;a = 1; }

5.21. [強制] [PHP033] 禁止使用and, or, 而是使用&&, ||

5.22. [建議]避免使用$i, $j這樣無意義的變量名, 除非是用作循環計數變量。

5.23. [建議]避免使用php邏輯代碼作為配置, 以降低改配置的危險性。

5.24. [建議]進行==判斷時,建議把常量放在前面, 避免誤寫成賦值操作。

示例

  • 不推薦形式:
    if ($a == 1){ }
  • 推薦形式:
    if (1 == $a){ }

5.25. [建議]使用變量前賦初值,提高可讀性,也可避免誤用別處定義的同名變量。

5.26. [建議]錯誤碼使用統一文件集中配置,并且使用常量,而不應裸寫數字

5.27. [建議]對于無需子類化的實體類以及不應重載的方法使用final關鍵字限定。

5.28. [強制]對于不應實例化的父類使用abstract關鍵字限定。

5.29. [建議]避免重載父類的static成員,這在5.2.x存在問題。

5.30. [建議]對于僅用于某個函數或類的全局變量,使用static的局部變量或者類成員變量代替。

5.31. [建議]在頭文件中用$GLOBALS定義全局變量,避免局部包含導致的作用域問題。

6. 代碼性能

6.1. [強制] [PHP034] 把重復調用放在循環體外。

示例

  • 不推薦形式:
    for($i = 0; $i < count($arr); $i++)
  • 推薦形式:
    $arrCount = count($arr); for($i = 0; $i < $arrCount; $i++)

5. 工具支持

對所有標記的有“eagle支持”的規則,大家可以本地調用客戶端檢查代碼是否符合這部分規則,另外在發起代碼評審(cooder)時也將自動觸發檢查,結果會以行間評論的形式插入到代碼評審中,幫助作者檢查代碼、幫助評審人評審代碼,詳細內容點擊查看


總結

以上是生活随笔為你收集整理的百度代码规范 -- PHP的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。