PHP 應用的效能瓶頸往往不在語言本身,而在於寫法細節。以下整理 12 條經驗法則,涵蓋變量傳遞、流程控制、資料庫、輸出緩衝等面向,助你寫出更高效的代碼。
<?php
// 推薦:返回陣列
function parseUser($raw) {
return explode('|', $raw);
}
$user = parseUser($userdb);
// 不推薦:污染全域命名空間
function parseUserGlobal($raw) {
global $detail;
$detail = explode('|', $raw);
}
parseUserGlobal($userdb);
返回值讓數據流向顯式,利於 OpCache 優化,也避免副作用。
<?php
$parts = explode('/', $_SERVER['REQUEST_URI']);
array_pop($parts);
$baseUrl = 'https://' . $_SERVER['HTTP_HOST'] . implode('/', $parts);
比依賴 HTTP_REFERER 更可靠(Referer 可被偽造或省略)。
<?php
// 恆等比較:類型與值同時檢查,避免隱式轉換開銷
if ($a === $b) { $c = $a; }
注意:原文第 3 點筆誤,=== 才是高效寫法。
LIMIT 100000, 10 需掃描 10 萬行;若主鍵連續,改用 WHERE id IN (100001,100002,...) 可大幅提速。非連續 ID 首次稍慢,後續受益於查詢緩存。
NT 系統在高併發 I/O、進程管理上穩定性遜於 *nix。
<?php
ob_start(); // 通用緩衝,加快輸出
// 或
ob_start('ob_gzhandler'); // *nix 下自動 Gzip,傳輸量減 70%+
if ($a == $expected) 讓引擎預測分支更準。if (empty($a)) 比 if (!$a) 更明確且略快。任選其一保持風格一致即可。
現代引擎對 $a = '...' 與 $a = "..." 優化一致,優先考慮可讀性與插值需求。
`table`.`col`SELECT *<?php
if ($online) {
$online1 = $online; // 關鍵:先賦值
setcookie('online1', $online, $time, $path, $domain, $secure);
}
// 否則需刷新頁面才能讀取 $_COOKIE['online1']
<?php
$fp = fopen($file, 'rb');
flock($fp, LOCK_SH);
$data = fread($fp, filesize($file));
fclose($fp);
// 兼具速度與併發安全
微優化積少成多,但架構層面(緩存策略、異步隊列、索引設計)才是數量級提升的關鍵。建議配合 xhprof / Blackfire 定期剖析熱點。