在 PHP 開發中,三元運算符(Ternary Operator)是簡化條件判斷、提升代碼簡潔度的利器。本文將從基本語法、進階技巧、嵌套使用到常見誤區,全面解析三元運算符的實戰應用。
三元運算符的標準格式為:(expr1) ? (expr2) : (expr3)。其邏輯等同於 if...else:若 expr1 為真,執行 expr2;否則執行 expr3。例如:
$if_summary = $row['IF_SUMMARY'] == 2 ? '是' : '否';
這行代碼等價於:
if ($row['IF_SUMMARY'] == 2) {
$if_summary = '是';
} else {
$if_summary = '否';
}
三元運算符將多行代碼壓縮為單行,不僅提升閱讀效率,執行速度也略優於傳統流程控制語句。
利用字符串連接符(.)可實現多語句執行:
(expr1) ? (expr2).(expr3) : (expr4).(expr5);
每個子表達式用括號包裹,確保獨立執行,功能逼近 if...else 代碼塊。
嵌套可處理複雜邏輯,例如:
$a > $b ? $x = ($a < $c ? $c - $a : $a - $c) : $x = ($b < $c ? $c - $b : $b - $c);
雖然簡潔,但嵌套過深會嚴重降低可讀性,增加維護成本,建議僅在簡單場景使用。
PHP 允許以空字符串佔位,實現「單邊執行」:
$a > $b ? print "Yes" : ""; // 條件真時輸出
$a > $b ? "" : print "No"; // 條件假時輸出
注意: 建議使用 print 而非 echo,因為 print 有返回值,符合表達式語境。
考慮以下代碼:
$str = $_GET['abc'] ? 'wangjinbo' : 'wjb';
錯誤理解: 以為是判斷 $str 是否等於 $_GET['abc']。
正確理解: 判斷 $_GET['abc'] 的布爾值。若為「空值」(''、null、0、undefined 等視為 false),則 $str = 'wangjinbo';否則 $str = 'wjb'。
if...else 或 switch。掌握三元運算符的精髓,能讓 PHP 代碼更優雅、高效。合理使用,切勿濫用。