PHP7 ?? 與 ?: 的作用和區別

zmxyzmxy1234發表於2020-06-29

我們經常要寫類似於這種判斷程式碼

// 判斷是否存在變數
$a = isset($b) ? $b : $c;
// 判斷變數是否為空
$a = !empty($b) ? $b : $c;

PHP7有了新語法糖,進行簡化(PHP版本必須大於7)

// 判斷是否存在變數
$a = $b ?? $c; // 等同於 $a = isset($b) ? $b : $c;
// 判斷變數是否為空
$a = $b ?: $c; // 等同於 $a = !empty($b) ? $b : $c;

他們的區別在

  • null合併運算子:?? 判斷變數不存在或為NULL
  • null條件運算子:?: 則還會判斷變數是否為空
    $a = [];
    print_r($a ?? '走了這邊');
    // []
    print_r($a ?: '走了這邊');
    // '走了這邊'
    ?? 還會判斷是否為NULL
    $a = null;
    print_r($a ?? '走了這邊');
    // 走了這邊
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章