PHP編碼規範
良好的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'
有好的建議,請在下方輸入你的評論
歡迎訪問個人部落格 https://guanchao.site
- 微信公眾號開發(二)微信公眾號的access_token
- ueditor上傳圖片新增水印
- nginx(二)伺服器中配置超時時間的方法
- 小程式警告:根據 sitemap 的規則[0],當前頁面 [pagesindexindex] 將被索引
- nginx(一)nginx配置反向代理與負載均衡
- VUE3(三十一)html單頁面使用VUE3
- VUE3(三十二)vue使用xlsx解析excel檔案
- thinkphp5 Auth 許可權管理
- javascript實現動態分頁
- sublime不使用補丁進行漢化
- php7.2安裝OCI8擴充套件支援oracle資料庫
- 微信小程式(三十一)自定義watch監聽屬性
- 微信小程式(二十六)微信小程式解析富文字的幾種方式
- 微信小程式(二十五)微信小程式富文字編輯器editor上傳圖片
- linux安裝及使用composer
- javascript 實現純前端將資料匯出excel兩種方式
- PHP編碼規範
- css例項(一)滑鼠hover下拉選單
- 微信小程式(十五)小程式回到頂部
- 微信小程式(十三)小程式彈窗wx.showToast及wx.showModal