2013-10-14 140 views
1

“> =”和“==”的非关联经营者,当他们彼此相邻,他们得到优先评价:做较低的优先级运算符关联非关联较高优先级运算符?

2 >= 3 == 3 

是这样的:

(2 >= 3) == 3 // ">=" have higher precedence over "==" 

但如果有在混合关联经营者,甚至更低的优先级运营商,它得到评估acording的关联操作:

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

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)