“> =”和“==”是非关联运算符,当它们彼此相邻时,它们会按优先级进行评估:
2 >= 3 == 3
就像:
(2 >= 3) == 3 // ">=" have higher precedence over "=="
但是如果混合中有一个关联运算符,即使是较低优先级的运算符,它也会根据关联运算符进行求值:
var_dump($a = 2 >= $b = 3 == 3); // bool(true)
var_dump(2 >= 3 == 3); // bool(false)
这是ilke:
var_dump($a = 2 >= ($b = 3 == 3));
var_dump((2 >= 3) == 3);
我理解正确吗?
答案 0 :(得分:1)
PHP仅解析定义的方式。为变量赋值提供更高(隐含)优先级是必要的,因为赋值的左侧必须是变量。无法解析为($a = 2 >= $b) = 3 == 3
。它不依赖于相关性。
看看这个例子; &
运算符是关联的(并且=>
不是)。
$b = 2;
$a = 2 >= $b & 2;
在这种情况下,它是从左到右。像:
var_dump($a = ((2 >= $b) & 2)); // int (0)
var_dump($a = 2 >= $b & 2); // int (0)
比较:
var_dump($a = (2 >= ($b & 2))); // bool (true)