比较运算符相对于空合并运算符的意外优先级

问题描述 投票:0回答:1

我不明白为什么会发生这种情况:

$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') { 
    ...
}
php operator-precedence null-coalescing-operator
1个回答
3
投票

这是一个运算符优先级的问题,尝试:

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

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

加上一般建议:括号永远不会太多! :) 如果您不确定在给定语言中首先计算什么 - 使用它们!

© www.soinside.com 2019 - 2024. All rights reserved.