在高頻迴圈或效能敏感的代碼中,條件判斷的寫法可能影響執行速度。本文透過實際基準測試,比較 if (!defined('CONST')) 與 defined('CONST') or 1 兩種寫法的效能差異。
microtime() 記錄開始與結束時間<?php
// 測試 1:10,000 次迴圈
$t1 = microtime(true);
$i = 0;
while ($i <= 10000) {
if (!defined('APP_PATH')); // 寫法 A
// defined('APP_PATH') OR 1; // 寫法 B (取消註解測試)
$i++;
}
$t2 = microtime(true);
echo "10,000 次 - if: " . ($t2 - $t1) . " 秒\n";
// 測試 2:1,000,000 次迴圈
$t1 = microtime(true);
$i = 0;
while ($i <= 1000000) {
if (!defined('APP_PATH')); // 寫法 A
// defined('APP_PATH') OR 1; // 寫法 B
$i++;
}
$t2 = microtime(true);
echo "1,000,000 次 - if: " . ($t2 - $t1) . " 秒\n";
?>
| 迴圈次數 | if (!defined()) | defined() OR 1 | 差異 |
|---|---|---|---|
| 10,000 | ~0.011 秒 | ~0.009 秒 | OR 快 ~18% |
| 1,000,000 | ~0.200 秒 | ~0.107 秒 | OR 快 ~46% |
if 語句涉及完整的控制結構:評估條件、分支跳轉、建立作用域。or (或 ||) 是短路運算子,僅需評估左側運算元,若為真則直接短路,無分支開銷。此處 defined() 回傳 false,導致右側 1 被評估,但整體指令較少。or 寫法在純邏輯判斷無副作用時仍略勝一籌。if/else,語意清晰。defined('C') or define('C', 'val') 等慣用模式。理解底層執行機制有助於寫出更高效的代碼,但務必在團隊協作與維護性之間取得平衡。