PHP null合并+三元运算符奇怪的行为

Ald*_*dos 4 php ternary-operator null-coalescing-operator

将新的 PHP7 空合并运算符与三元运算符结合使用时,我遇到了意外行为。

具体情况(伪代码):

function a()
{
    $a = 1;
    $b = 2;
    return $b ?? (false)?$a:$b;
}

var_dump(a());
Run Code Online (Sandbox Code Playgroud)

结果是 int(1)。

谁能解释我为什么?

jer*_*oen 6

您的空格不反映 php 评估表达式的方式。请注意, the??具有比三元表达式更高的优先级

你得到的结果是:

($b ?? false) ? $a : $b;
Run Code Online (Sandbox Code Playgroud)

这是$a只要$b不是null或计算结果为false