原則 1:在合適的場合使用 PHP
PHP 由 Rasmus Lerdorf 為解決 Web 實際問題而創造,定位是 **Web 專用腳本語言**。它擅長:請求-回應週期、模板渲染、資料庫整合、快速原型。不擅長:長時間運行程序、高併發非阻塞 I/O、複雜運算密集任務。遇到 PHP 無法優雅解決的問題,果斷引入 Go、Node.js、Python 等工具協作。
原則 2:用分表/分庫提升擴展性
單表寫入瓶頸無法靠垂直擴展解決。WordPress.com 將用戶資料分散在 **4096 個資料庫**,配合強大快取策略支撐超大流量。關鍵技巧:
- 水平分表:依用戶 ID hash 分配 shard。
- 中間層路由:應用層決定連哪個庫,或用 Proxy (Vitess、MyCat)。
- 避免跨分片 JOIN/事務,設計冗餘欄位或最終一致性補償。
原則 3:永遠不信任用戶輸入
**所有**來自 `$_GET`、`$_POST`、`$_COOKIE`、`$_REQUEST`、`$_SERVER`、`$_FILES` 的資料視為惡意。防禦清單:
- SQL 注入 → **預處理語句 (PDO/Prepared Statements)**。
- XSS → 輸出時
htmlspecialchars()、CSP 標頭、模板引擎自動逃逸。
- CSRF → 同站 Cookie (SameSite) + 隱藏 Token 驗證。
- 檔案上傳 → 白名單副檔名、MIME 檢查、重命名、存非公開目錄、禁用腳本執行權限。
- XXE →
libxml_disable_entity_loader(true)。
原則 4:善用快取,但要懂失效策略
快取層級:
- Opcode:OPcache (生產必開)。
- 資料快取:Redis/Memcached 存熱點查詢、計數器、Session。
- HTTP 快取:
ETag、Last-Modified、Cache-Control、CDN Edge。
- 頁面靜態化:低頻更新頁面直接產出 HTML (Nginx 直接服務)。
核心難點:快取失效。採用 **Tag-based Invalidation**、版本化 Key、事件驅動 (Binlog/Redis PubSub) 主動清理,避免臭資料。
原則 5:用 IDE、模板與片段加速開發
- IDE:PhpStorm / VS Code + PHP Intelephense → 智能補全、重構、除錯 (Xdebug)、靜態分析 (Psalm/PHPStan)。
- 模板引擎:Twig、Blade、Lathe → 繼承、區塊、自動逃逸、沙箱。
- 代碼片段:常用結構 (Repository、Service、DTO、Migration) 存為 Live Template / Snippet,減少樣板碼。
- 自動化:Composer scripts、Git Hooks (PHP-CS-Fixer、PHPStan、測試) → CI/CD 流水線。
原則 6:嚴格型別與靜態分析
declare(strict_types=1); // 檔案頂部強制嚴格模式
- PHP 7.0+ 純量型別宣告、回傳型別、
void、never。
- 整合 PHPStan Level 5+ / Psalm 於 CI,捕獲邏輯錯誤、死代碼、型別不匹配。
原則 7:依賴注入與介面導向設計
- 使用容器 (PHP-DI、Symfony DI、Laravel Container) 管理服務生命週期。
- 高層模組不依賴低層實作,雙方依賴抽象介面 (RepositoryInterface、PaymentGatewayInterface)。
- 便於單元測試 (Mockery) 與替換實作 (MySQL → PostgreSQL、Stripe → PayPal)。
原則 8:測試金字塔:單元 > 整合 > 端到端
- 單元測試 (PHPUnit):覆蓋核心領域邏輯、服務類,目標 > 80%。
- 整合測試:資料庫遷移、API 端點、外部服務 Mock (WireMock)。
- E2E:關鍵業務流程 (下單、支付) 用 Codeception / Cypress。
- 測試隨代碼提交自動跑,失敗阻擋合併。
原則 9:可觀測性:日誌、指標、追蹤
- 結構化日誌:Monolog + JSON 格式,含 trace_id、span_id、user_id、環境標籤。
- 指標:Prometheus + Grafana 監控 QPS、延遲、錯誤率、慢查詢、隊列堆積。
- 分散式追蹤:OpenTelemetry + Jaeger/Zipkin 串聯跨服務請求鏈路。
原則 10:持續重構與技術債管理
- 定期跑
phpstan、psalm、phpcs、phpcpd (重複代碼偵測)。
- 建立「技術債登記表」,每 Sprint 預留 20% 時間償還。
- 遵循 **Boy Scout Rule**:每次提交讓代碼比接手時更乾淨。
總結
這十大原則涵蓋選型、架構、安全、效能、工程化、可維護性。PHP 專案若能貫徹執行,完全能支撐企業級、高併發、長期演進的系統。語言不是限制,工程紀律才是關鍵。