PHP 三元運算子(?:) 與 NULL運算子(??)差異

很多程式語言都有三元運算子,而 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

?? 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
?>

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料