在这个PHP表达式周围加括号会改变结果.为什么?


Putting parentheses around this PHP expression changes the result. Why?

这两行产生不同的结果:

$r1= true xor true ;
$r2=(true xor true);
var_dump($r1);
var_dump($r2);

输出:

bool(true)
bool(false)

为什么?

Codepen示例:http://codepad.org/O4Kn1YVa

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

=优先级高于xor

$r1 = true xor true ;

=>

($r1 = true) xor true ; // "=" has highest priority

=>

$r1 xor true ; // and only now xor

在这种情况下,您不会在任何地方写入xor的结果,并且已经丢失了它

在结果为2的情况下,您使用括号强制执行顺序。

所有括号所做的就是强制执行优先级。因此,如果添加它们会有所不同,那么您已经更改了优先级/执行顺序。

这里的情况是这样的:http://php.net/manual/en/language.operators.precedence.php