統一編碼風格能降低認知負擔、減少合併衝突、提升代碼可讀性。本指南以 PSR-12 為基準,結合 PHP 社群慣例與團隊實踐,給出可直接落地的規範清單。
?> 結束標籤。| 類型 | 規範 | 範例 |
|---|---|---|
| 類別/介面/Trait | StudlyCaps | UserService, LoggerInterface |
| 方法/函數 | camelCase | getUserById() |
| 常數 | UPPER_SNAKE_CASE | MAX_RETRY_COUNT |
| 屬性/變數 | camelCase | $userName, $maxRetry |
| 私有/保護屬性 | 前綴單底線 | protected $_cache |
| 縮寫詞 | 僅首字母大寫 | getHtmlStatistic() 而非 getHTMLStatistic() |
class/interface/trait 名稱後同行左大括號 {,右大括號 } 獨立一行。extends/implements 同行;過長換行縮排 1 層。public/protected/private),不可用 var。static/final/abstract 置於可見性之後。declare(strict_types=1); 置於檔案最頂端。if/elseif/else/while/for/foreach/switch/try/catch 關鍵字後加一空格,左括號同行,右大括號獨立行。else/elseif/catch/finally 與前一右大括號同行。[],元素逗號後加空格,多行時尾隨逗號。/** ... */)。string[], User|null)。// 前後各一空格,獨立行置於代碼上方。Exception 或 RuntimeException)。catch (Exception $e) 吞噬錯誤。try/finally 或 using 模式(PHP 8.1+ fclose 等已支援)。phpcs --standard=PSR12、phpstan analyse。src/
Domain/ # 核心業務邏輯、實體、值物件
Application/ # 用例服務、DTO、命令/查詢處理器
Infrastructure/ # 資料庫、快取、外部 API 適配器
Presentation/ # HTTP 控制器、中介軟體、視圖模型
tests/
Unit/
Integration/
# 安裝
composer require --dev squizlabs/php_codesniffer phpstan/phpstan vimeo/psalm
# 檢查
vendor/bin/phpcs --standard=PSR12 src/
vendor/bin/phpstan analyse src/ --level=5
vendor/bin/psalm --show-info=true
# 自動修正大多數風格問題
vendor/bin/phpcbf --standard=PSR12 src/
規範是為了人,不是為了工具。團隊共同制定、持續優化、工具強制執行,才能真正發揮效用。新成員入職第一天跑通 phpcbf,養成「提交前自動修正」肌肉記憶。