PHP null coalesce +三元运算符奇怪的行为
使用三元运算符使用新的PHP7空合并运算符时,我遇到了意外的行为。
具体情况(虚拟代码):
function a()
{
$a = 1;
$b = 2;
return $b ?? (false)?$a:$b;
}
var_dump(a());
结果是int(1)。
有人可以解释我为什么吗?
你的空间不反映php评估表达式的方式。 请注意??
比三元表达式具有更高的优先级。
你会得到以下结果:
($b ?? false) ? $a : $b;
只要$b
不为null
或者计算结果为false
它就是$a
。
检查语句return $b ?? (false)?$a:$b;
return $b ?? (false)?$a:$b;
这首先评估$b ?? (false)
$b ?? (false)
其结果然后传递给? $a:$b
? $a:$b
;
$b ?? (false)
$b ?? (false)
意味着给出第一个not null and isset
值,在这种情况下是$b
由于$b = 2
,这是一个真正的值,上面的表达式变成:
回报($b) ? $a : $b
($b) ? $a : $b
返回的值$a
是int(1)
如果您认为原始返回语句如下所示,则整个事情会更有意义:
返回($b ?? (false)) ? $a : $b;
($b ?? (false)) ? $a : $b;
我们不需要添加额外的括号,因为??
之前评估过?
上一篇: PHP null coalesce + ternary operators strange behavior
下一篇: How do you use the ? : (conditional) operator in JavaScript?