将此 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

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 的情况下,您通过括号强制执行顺序。