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返回的值$aint(1)

如果您认为原始返回语句如下所示,则整个事情会更有意义:

返回($b ?? (false)) ? $a : $b; ($b ?? (false)) ? $a : $b;

我们不需要添加额外的括号,因为?? 之前评估过?

链接地址: http://www.djcxy.com/p/57975.html

上一篇: PHP null coalesce + ternary operators strange behavior

下一篇: How do you use the ? : (conditional) operator in JavaScript?