開發時常需暫時禁用包含 PHP 與 HTML 混合的代碼區塊。逐行加 // 或 {/* */} 容易破壞 HTML 結構,且恢復麻煩。利用 PHP if (false) 條件編譯特性,可完整保留語法結構、不輸出任何內容、一鍵切換啟用/停用。
<?php if (false): ?>
<?php if (1 === 2): ?>
這也不會顯示
<?php endif; ?>
<?php endif; ?>
if (false) 而非註解?| 方式 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
if (false): ... endif; | 語法檢查有效、IDE 識別、巢狀安全、一鍵切換 | 仍會解析 PHP (微小開銷) | 大區塊混合代碼、臨時禁用功能 |
/* ... */ | 完全不解析 | 不可巢狀、HTML 註解衝突、易破壞結構 | 純 PHP 代碼、單行/小區塊 |
// 逐行 | 精確控制 | 極度繁瑣、HTML 無法單行註解 | 極小片段 |
| 區塊註解 | HTML 部分無效、字串裡的 */ 會提前結束 | 純 PHP 區塊 |
<?php
// 設定檔或環境變數控制
$features = [
'new_checkout_flow' => true,
'beta_dashboard' => false,
'promo_banner' => (bool)($_ENV['ENABLE_PROMO'] ?? false),
];
?>
<?php if ($features['promo_banner']): ?>
<?php echo renderPromoBanner(); ?>
<?php endif; ?>
<?php if ($features['beta_dashboard']): ?>
<?php include 'dashboard_v2.php'; ?>
<?php else: ?>
<?php include 'dashboard_v1.php'; ?>
<?php endif; ?>
<?php
$disabledCode = <<<'HTML'
<?php echo "這不會執行"; ?>
純文字保存,不解析 PHP
HTML;
// 需要時 eval (不推薦生產用) 或單純保存
// eval('?>' . $disabledCode);
?>
if (): ... endif; 而非大括號,HTML 可讀性更高false 或 1 === 2 等明顯恆假表達式,語意清晰{} 與 HTML 縮排混淆// TODO: 待重構後啟用if (false) 區塊放置副作用代碼 (如 session_start()、資料庫寫入),雖不執行但易誤導Settings → Editor → Code Style → PHP → Wrapping and Braces → Alternative syntax for control structuresif (false): ... endif; 區塊這個技巧利用 PHP 編譯器「條件編譯」特性,在保持代碼完整性、語法檢查、IDE 支援的前提下,優雅解決混合代碼區塊註解難題。