if 中使用了 ?? 導致預料之外的結果

junwind發表於2023-01-12

我在 if 判斷中這樣用了 ??

$ts = 1696993871;
if ($ts??0 <= time()) {  // $ts > time() 的
    var_dump(111);
}
// 我預料的結果是 false,應該是不會走到 if 判斷中的, 實際列印出了 111

// 我單獨列印下面,返回的是 1696993871
var_dump($ts??0 <= time());

其實執行時, 是這樣的順序

$ts ?? ( 0 <= time() ) // $ts 有值則等於自身值,沒有取後面括號中的

我們可以這樣改下 , 或者不用這種寫法

if ( ($ts??0) <= time() ) { // 加括號,改變運算的優先順序
    var_dump(111);
}

總結

看來,使用語法糖時,還是要慎重一些。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
六月的風

相關文章