命名規範
| 類型 | 風格 | 範例 |
| 類別檔案 | PascalCase + .class.php | Pay.class.php |
| 類別名 | PascalCase,目錄對應 | Zend_Autoloader → Zend/Autoloader.class.php |
| 函式 | snake_case | get_client_ip() |
| 方法 | camelCase,私有 _ 開頭 | listComment(), _getResource() |
| 屬性 | camelCase,私有 _ 開頭 | $userName, $_instance |
| 常數 | UPPER_SNAKE_CASE | HOME_URL |
語義化動詞建議
list + 單數名詞:listApple()(列表)
get + 單數名詞:getApple()(單筆)
Total 後綴:expenseTotal(總計)
found:布林旗標(是否找到)
success/ok:操作成功
done:流程完成
error:錯誤資訊
result:回傳資料
重構原則
- 函式/方法控制在單一螢幕高度(約 50 行)。
- 刪除未使用代碼(版控可追溯,勿註解保留)。
- 修改他人代碼需簽名(註解標註作者、日期、原因)。
- 複雜模組附
README.md 說明業務邏輯。
- 單一職責:一個類做一件事,一個函式做一件事。
代碼簡化技巧
短路運算子替代 if
// 原版
$a = 1; $b = 0;
if (isset($a)) { $b = 1; print $b; }
if ($b != 0) print $b;
// 簡化
isset($a) && ($b = 1) && print $b;
$b == 0 || print $b;
常量前置防誤賦值
// 易寫成 = 的 bug
if ($a = 1) { ... } // 永真,且修改 $a
// 常量前置,編譯器直接報錯
if (1 = $a) { ... } // Parse error
// 正確寫法
if (1 == $a) { ... }
查找表模式替代多重 if/else
// 原版:錯誤碼映射狀態
if ($err==4||$err==5||$err==7||$err==8) $state=1;
elseif ($err==1||$err==3||$err==6) $state=2;
// 查找表:O(1) 查找,易維護
$map = [4=>1, 5=>1, 7=>1, 8=>1, 1=>2, 3=>2, 6=>2];
isset($map[$err]) && $state = $map[$err];
工具落地建議
- 採用 PHP_CodeSniffer + PSR-12 標準自動檢查。
- CI 流程整合
phpcs、phpstan(靜態分析)、phpunit。
- 統一編輯器
.editorconfig(縮排、換行、編碼)。