if 中使用了 ?? 导致预料之外的结果
我在 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 协议》,转载必须注明作者和本文链接
优先级最低
这是一个感觉优先级高但实际优先级低的东西
www.php.net/manual/zh/language.ope...
??
想成是赋值运算 就很容易记住了 赋值优先级没有比较运算高如 @4pmzzzzzzzzzz 所说,其实
$a??0 < time()
等价于$b = isset($a) ? $a : 0 < time()
,$a
有值,$b
为$a
; 若$a
不存在,$b
为true
。三目运算、逻辑与、逻辑或是有返回值的。一般这种写法我都会加上括号,这样可读性也会高
我也遇到过,主要还是和写sql一样当成最左原则了,就和四则与暗算没注意 */ 优先级比 +- 高一样。养成加括号习惯就好