PHP的逻辑运算符中,xor表示逻辑异或

$a xor $b

结果

如果 $a$b 有且仅有一个为 true,则返回 true;如果都是truefalse,则返回false

然而在测试xor运算符时,发现一点问题
错误情况1

<?php
        $a = false xor true;
        var_dump($a);
?>

结果1

boolean false

情况2

<?php
        $a = true xor false;
        var_dump($a);
?>

结果2

boolean true

这是怎么回事呢?


我们换个测试xor运算符的方式
情况3

<?php
        echo false xor true;
?>

结果3

1

这样就没问题了,那么前两种情况是哪里有毛病呢?


情况4

<?php
        $a = (false xor true);
        var_dump($a)
?>

结果4

boolean true

这样就对了,可见应是运算符优先级导致的。


在PHP中,and、or、xor的运算符优先级是比 = 低的,在这种情况下,加个小括号就好了……