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

在这个PHP表达式周围加上括号会改变结果。为什么?,php,logic,operators,Php,Logic,Operators,这两条线产生不同的结果: $r1= true xor true ; $r2=(true xor true); var_dump($r1); var_dump($r2); 输出: bool(true) bool(false) 为什么? Codepen示例:所有括号都是为了强制执行优先级。因此,如果添加它们会有所不同,那么您已经更改了优先级/执行顺序 这里的情况是这样的: =的优先级高于xor $r1 = true xor true ; => => 在这种情况下,您不会在任何地方写入xor的

这两条线产生不同的结果:

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

var_dump($r1);
var_dump($r2);
输出:

bool(true)
bool(false)
为什么?


Codepen示例:

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

这里的情况是这样的:

=的优先级高于xor

$r1 = true xor true ;
=>

=>

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


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

只有一个逻辑结论。
=
运算符的值高于
异或
运算符。谢谢。为了消除混乱,这更有意义。你可能是对的。但这感觉有些出乎意料。我现在把这个例子简化了一点。也许你也想修改你的答案。完成了。此外,当使用带外圆括号的case字符串连接和三元运算符“?:”时,也可以获得相同的行为。
($r1 = true) xor true ; // "=" has highest priority
$r1 xor true ; // and only now xor