本文整理自經典 PHP 優化建議,經現代 PHP 版本(7.4+/8.x)驗證,保留仍具指導意義的 53 條核心法則,分類標註優先級。
🔴 核心語法優化(高影響)
- 靜態方法優先:能
static 就 static,速度提升 ~4 倍
- 數組鍵加引號:
$row['id'] 比 $row[id] 快 7 倍(避免常量查找)
- echo 多參數:
echo $a, $b 比 echo $a . $b 快(無拼接開銷)
- foreach 替代 for:預計算最大值,或直接
foreach 避免重複 count()
- 釋放大變量:
unset($bigArray) 釋放內存,特別在循環中
- 避免魔術方法:
__get/__set/__autoload 有額外開銷
- 慎用 require_once:
require + 路徑緩存更快
- include 絕對路徑:避免
include_path 遍歷
- 用 $_SERVER['REQUEST_TIME']:比
time() 快(無系統調用)
- 函數替代正則:
strpos/strstr 比 preg_match 快數量級
- strtr > str_replace > preg_replace:
strtr 效率是 str_replace 4 倍
- switch 替代多重 if-else:跳表優化,可讀性更好
- 禁用 @ 抑制錯誤:極其低效,改用
isset() 或錯誤處理器
- 開啟 mod_deflate:壓縮傳輸,提升頁面加載速度
- 數據庫短連接:用完即關,避免長連接佔用資源
🟡 變量/操作微優化(中影響)
- 局部變量遞增最快
- 全局變量遞增慢 2 倍
- 對象屬性遞增
$this->prop++ 慢 3 倍
- 未預定義局部變量遞增慢 9-10 倍
- 定義未使用的局部變量也會降低速度
- 方法調用與類方法數量無關
- 子類方法比父類同名方法快
- 空函數調用 ≈ 7-8 次局部遞增;類方法 ≈ 15 次
🟢 架構/緩存策略(長期收益)
- 靜態 HTML 替代動態腳本(Apache 解析 PHP 慢 2-10 倍)
- OPcache 必開:提升 25%-100% 性能(免編譯)
- 數據緩存用 Redis/Memcached:減輕 DB 壓力
strlen() vs isset($str{5}):後者更快(語言結構無函數調用開銷)
++$i 比 $i++ 快(3 vs 4 操作碼)
- 非必要不 OOP:對象/方法調用消耗內存
- 數組代替類實現簡單數據結構
- 方法粒度適中:別過度拆分
- 優先用內置函數
- 耗時邏輯寫 C 擴展(或用 FFI/Swoole)
- Xdebug Profile 定位瓶頸
mod_zip 壓縮傳輸量降 80%
file_get_contents 替代 fopen/fread 系列
- 減少文件 I/O
- SQL 優化:少
INSERT/UPDATE,索引覆蓋
- 循環外聲明大變量/對象
- 避免多維數組嵌套循環賦值
- 字符串操作用內置函數而非正則
foreach 效率 > while > for
- 單引號字符串(無變量解析)
$i += 1 習慣兼顧性能
- 用完
unset($GLOBALS)
現代補充(PHP 8.x)
- JIT 編譯器:計算密集型顯著提速
- 類型聲明:引擎優化依據
match 表達式:比 switch 更快且安全
- 屬性
#[Attribute] 替代註解解析
- WeakMap/WeakReference:緩存場景防內存洩漏
優化無銀彈,**Profile 先行**,針對熱點精準施策,避免過早優化。