PHP編碼規範

語言: CN / TW / HK

良好的PHP編碼規範能讓你的程式碼看起來更加的優雅,清晰的結構有助於提高可讀性並減少工作量。

一:編碼格式

檔案應該使用 Unicode (UTF-8) 編碼儲存,不要使用 位元組序標記(BOM) 。與 UTF-16 和 UTF-32 不同,UTF-8 編碼的檔案不需要指明位元組序,而且 位元組序標記(BOM) 在PHP中會產生預期之外的輸出,阻止了應用程式設定它自己的頭資訊。

如果儲存帶BOM的編碼,會在檔案頭輸出類似ufeff的內容。這樣是不好的,會導致JSON等資料無法正常讀取。

二:PHP閉合標籤

純PHP檔案,不要寫 ‘?>’ 閉合標籤。保持最後一行留空即可。

PHP的閉合標籤可能會在一些框架中造成編碼問題。

這個一定要注意,否則出了問題可能沒有辦法鎖定問題的來源。

例如:

<?php     phpinfo();

三:程式碼縮排

使用Tab鍵來縮排,每個Tab鍵長度設定為4個空格;

四:程式碼換行

為了保證程式碼的可讀性。請注意程式碼換行。

例:

$dataList = DB::select(" SELECT p1.id,p1.personal_id,p2.name ,p2.id AS userid           FROM student_group_detail p1          LEFT JOIN user p2 ON p1.userid=p2.id          WHERE p1.grpid = '{$grpid}'          ORDER BY p1.userid,p1.personal_id ASC");

五:命名規則

1:類命名規則:使用大駝峰式(StudlyCaps)寫法;

2:方法命名規則:(類的)方法名 使用小駝峰(cameCase)寫法;

3:函式命名規則:函式名使用 小寫字母 + 下劃線 寫法,如 function http_send_post();

4:變數命名規則:變數名 使用小駝峰寫法,如 $userName;

六:程式碼註釋

良好的程式碼註釋,方便其他同事更快捷的閱讀你的程式碼。

1:類註釋:要標記好建立人,類的功能,及建立時間。

/**  * @name 微信小遊戲資料統計類  * @author camellia  * @date 20200703  */ class ReckonController extends AppHttpControllerscommonCommonController { }

2:方法註釋:要標記好方法功能,建立人,建立時間,引數含義,及返回值

/**      * @name 獲取微信小遊戲統計頁列表      * @author camellia      * @date 20200703      * @param id 使用者群組ID student_group_detail表外來鍵      * @return json      */     public function getWxGameReckonList() { }

3:單行註釋

// 定義一個空陣列,用來儲存返回值         $group = array();         // 計算陣列長度         $dataNum = count($dataList);

4:多行註釋,這裡有一個小技巧。

/*if (!isset($_REQUEST['id'])) //1-2-45 分割樣式         {             $result['code'] = -1;             $result['msg'] = '系統故障-引數攜帶不全';             return $result;         }         $grpid = strim($_REQUEST['id']);//*/

注意看我結束位置的註釋寫法,這樣寫的好處是,解除註釋的時候,你只需要將開頭的/*刪除就可以了。後邊的可以不用理會。

5:一個專案多人協作開發,不可避免的會出現組員之前互相交叉改程式碼的一個情況,修改別人的程式碼的時候,註釋的格式:

標註新增時間,並標註為何新增。

// ======================================================== // add by camellia 20200703 微信小遊戲統計 // 獲取微信小遊戲統計列表 Route::get("/getWxGameReckonList", '[email protected]'); // 獲取微信小遊戲使用者關卡詳情 Route::get("/getUserLevelDetail", '[email protected]');

七:控制結構

這裡的控制結構主要指if-elseif-else 與 switch-case

(1):if-elseif-else

<?php if ($expr1) { // if 與 ( 之間有一個空格,) 與 { 之間有一個空格   } elseif ($expr2) { // elesif 連著寫,與 ( 之間有一個空格,) 與 { 之間有一個空格   } else { // else 左右各一個空格   }

(2):switch-case

<?php switch ($expr) { // switch 與 ( 之間有一個空格,) 與 { 之間有一個空格     case 0:         echo 'First case, with a break'; // 對齊         break; // 換行寫break,也對齊。     case 1:         echo 'Second case, which falls through';         // no break     case 2:     case 3:     case 4:         echo 'Third case, return instead of break';         return;     default:         echo 'Default case';         break; }

在 "switch" 語句中應該總是包括 "default" 控制。

八:變數宣告及使用

1:普通變數:宣告此類變數的時候,用描述性的變數的命名,採用小駝峰式寫法。像 $i 或 $n 等等都是不建議使用的。

2:全域性變數:宣告此類變數的時候,需要給其附預設值。

3:靜態變數:其是儲存在伺服器的執行記憶體中,因此不宜宣告過多,容易造成記憶體崩潰。

4:常量:命名有意義,採用大寫字母加下劃線的形勢命名。

九:業務模組

1:涉及到多個數據表 更新/新增 操作時,最外層要用事務,保證資料庫操作的原子性;\ 2:業務邏輯統一封裝到 Mode層;\ 4:控制器只做URL路由,不要當作 業務方法 呼叫;\ 5:控制器層不能出現SQL操作語句,如 ThinkPHP框架的 where()、order() 等模型方法,即,控制器中,不要出現類似這樣的SQL語句:D('XXX')->where()->order()->limit()->find(); where()、order()、limit() 等SQL方法只能出現在 Model層

十:開發注意事項

1:一個PHP檔案中,至允許宣告一個類。

2:不允許使用三元運算子來進行判斷。

3:大括號的開始必須在類名的下一行頂格。例如:

class Think {     // ... }

4:函式或方法的初始大括號應該在函式宣告的下一行頂格。例如: 

function get_client_ip() {     // … }

5:引用只允許定義在函式引數中,實時傳遞引用是禁止的。例如:

// 引用定義在函式引數-允許的 function defineRefInMethod(&$a) {     $a = 'a'; }  defineRefInMethod($b); echo $b; // 'a' // 實時傳遞引用-禁止的 function callTimePassRef($a) {     $a = 'a'; } callTimePassRef(&$c); echo $c; // 'a'

有好的建議,請在下方輸入你的評論

歡迎訪問個人部落格 http://guanchao.site