当我使用新的PHP7空合并运算符与三元运算符时,我遇到了意外的行为。
具体情况(虚拟代码):
function a()
{
$a = 1;
$b = 2;
return $b ?? (false)?$a:$b;
}
var_dump(a());
结果为int(1)。
有人可以解释一下为什么吗?
当我使用新的PHP7空合并运算符与三元运算符时,我遇到了意外的行为。
具体情况(虚拟代码):
function a()
{
$a = 1;
$b = 2;
return $b ?? (false)?$a:$b;
}
var_dump(a());
结果为int(1)。
有人可以解释一下为什么吗?
return $b ?? (false)?$a:$b;
首先评估$b ?? (false)
,其结果然后传递给? $a : $b
;
$b ?? (false)
的意思是给第一个非null和isset
值,在这种情况下是$b
由于$b = 2
,它是一个真实的值,上面的表达式变为:($b) ? $a : $b
,返回$a
的值,它是int(1)
如果您将原始返回语句视为以下内容,则整个过程将更容易理解:($b ?? (false)) ? $a : $b;
我们不需要添加额外的括号,因为??
在?
之前被评估。return $b ?? (false)?$a:$b; // will return 1
return $b ?? ((false)?$a:$b); // will behave as you wanted