php奇怪的优先级== over null coalesce operator

时间:2018-04-30 17:05:30

标签: php

我不明白为什么会这样:

$var = 'x';
var_dump($var ?? '' == 'somevalue');

输出string(1) "x",而人们应该bool(false)

这背后的原因是什么?

想象一个用例,请考虑例如:

// I want to do something only if the optional_parameter is equal to somevalue
if($_GET['optional_parameter'] ?? '' == 'somevalue') { 
    ...
}

1 个答案:

答案 0 :(得分:2)

这是运营商优先级的问题,请尝试:

$var = 'x';
var_dump(($var ?? '') == 'somevalue');

更多:http://php.net/manual/en/language.operators.precedence.php

另外一般建议:从来没有太多的parens! :)如果您不确定在给定语言中首先计算的是什么 - 请使用它们!