?: 基本語法C# 唯一的三元運算子,語法:test ? expression1 : expression2。test 為 true 回傳 expression1,否則回傳 expression2。常作為 if-else 簡寫。
$name = GET('name') != null ? GET('name') : '';
function GET($key) {
if (isset($_GET[$key])) {
$fp = fopen('c.txt','a');
fwrite($fp, '1-'); // 記錄呼叫次數
fclose($fp);
return $_GET[$key];
}
return null;
}
執行後 c.txt 內容為 1-1-,證明 GET('name') 被呼叫了兩次:一次在條件判斷,一次在 true 分支回傳。
$name = GET('name');
$name = $name != null ? $name : '';
雖然多一行,但避免重複呼叫昂貴函式(如資料庫查詢、複雜運算、外部 API),效能提升顯著。
三元運算子優先級低於指派運算子(=),故:
$a = $b ? $c : $d; // 正確:($a = ($b ? $c : $d))
$a = $b ? $c : $d = $e; // 錯誤解讀:($a = $b) ? $c : ($d = $e)
複雜表達式建議加括號明確優先順序,避免邏輯錯誤。
if-else 更清晰。理解運算子求值順序與副作用,是寫出高效、無 Bug 程式碼的關鍵細節。