较低优先级运算符是否关联非关联的高优先级运算符?

时间:2013-10-14 06:24:13

标签: php operators

“> =”和“==”是非关联运算符,当它们彼此相邻时,它们会按优先级进行评估:

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); 

我理解正确吗?

1 个答案:

答案 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)