我不明白为什么会发生这种情况:
$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') {
...
}
这是一个运算符优先级的问题,尝试:
$var = 'x';
var_dump(($var ?? '') == 'somevalue');
更多:http://php.net/manual/en/language.operators.precedence.php
加上一般建议:括号永远不会太多! :) 如果您不确定在给定语言中首先计算什么 - 使用它们!