PHP 的靈活性使其能適應從個人小站到大型分佈式系統的各種規模,但「用什麼樣的 PHP 做什麼樣的項目」往往決定了成敗。本文從項目規模劃分三個梯隊,剖析架構選型、核心痛點與演進路徑。
index.php + 路由分發 + 視圖模板vlucas/phpdotenv、illuminate/database (Eloquent) 或 medoo/medooproject/ ├── public/ # 僅暴露 index.php、靜態資源 ├── src/ │ ├── functions.php # 通用函數 │ └── db.php # DB 連接單例 ├── views/ # PHP 模板文件 ├── config/ # 配置文件 └── vendor/
| 優點 | 缺點 |
|---|---|
| 開發極快、零學習成本、部署簡單 | 代碼復用難、測試困難、耦合度高、擴展性差 |
| 痛點 | 對策 |
|---|---|
| OO 特性不完整(無泛型、多重繼承) | PHP 8.1+ 引入 readonly、intersection types、traits 組合;善用組合優於繼承 |
| 單線程阻塞模型 | Swoole/OpenSwoole/Hyperf 協程化;I/O 密集型場景顯著提升吞吐 |
| 缺乏企業級 IDE 重構、單測集成 | PhpStorm + PHPStan/Psalm 彌補;Pest 讓測試更愉悅 |
┌─────────────┐
│ CDN/WAF │
└──────┬──────┘
▼
┌─────────────┐
│ Nginx/LVS │ ← SSL 卸載、靜態資源、限流
└──────┬──────┘
▼
┌────────────┼────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ PHP-FPM │ │ PHP-FPM │ │ PHP-FPM │ ← 無狀態 API 層 (Laravel/Hyperf)
│ Cluster │ │ Cluster │ │ Cluster │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
▼ ▼ ▼
┌────────────────────────────────┐
│ Redis Cluster / MQ │ ← 會話、緩存、隊列、分佈式鎖
└────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ MySQL 主 │ │ MySQL 從 │ │ ES/Click │
│ (寫) │ │ (讀/備) │ │ (搜/分析)│
└──────────┘ └──────────┘ └──────────┘
總結:PHP 沒有銀彈,只有適合當前階段的架構。小項目用「簡」,中項目用「規」,大項目用「解」——解耦、解壓、解耦合。保持技術棧精簡,用對工具解決對的問題。