很多程式語言都有三元運算子,而 PHP 在 7.x 後,有多一個 ?? 的語法,可以簡化一些常用的語法。
例如:
- $arg = isset($_GET['arg']) ? $_GET['arg'] : '';
可簡寫成
- $arg = $_GET['arg'] ?? '';
PHP 三元運算子(?:) 與 NULL運算子(??)差異
在實際操作 ?? 和 ?: 的時候,還是有些小地方要注意的
官方文件:三元運算子(?:) 與 NULL合併運算子(??)
?: Ternary Operator
- $action = ($expr1) ? $expr2 : $expr3;
- 當 $expr1 為 true,return $expr2,否則 return $expr3。
-
if ($expr1) return $expr2; else return $expr3;
-
- 當 $expr1 為 true、$expr2 沒有任何設定(?:;),則會回傳 $expr1
- 當 $expr1 為 true,return $expr2,否則 return $expr3。
?? Null Coalescing Operator
- $action = $expr1 ?? $expr2;
- 當 $expr1 不為 null,return $expr1,否則 return $expr2。
-
if (isset($expr1) && !is_null($expr1)) return $expr1; else return $expr2;
?? 與 ?: 的不同
- ?: = if ($x) 判斷是否為 true
- ?? = if (isset($x) 判斷是否 不為 null 且 沒有設定值
測試程式
<?php $b = $a ?: 'aa'; // aa & PHP Notice: Undefined variable: a in test.php on line 2 $b = $a ?? 'aa'; // aa $a = ''; $b = $a ?: 'aa'; // aa $b = $a ?? 'aa'; // '' $a = null; $b = $a ?: 'aa'; // aa $b = $a ?? 'aa'; // aa $a = 'bb'; $b = $a ?: 'aa'; // bb,注意:回傳不是空,而是 $a 的值 $b = $a ?? 'aa'; // bb ?>