PHP xor returns 错误值

PHP xor returns wrong value

使用 php 7.1.0 我正在 运行 这个小测试:

<?php

$a = true;
$b = true;

$value = $a xor $b;
if ($value == true) {
    print "bad!\n";
} else {
    print "good\n";
}    

它又回来说不好了。为什么?两个真值的异或应该为假,而不是真。

问题是运算符优先级。 xor 运算符的优先级低于 =,因此您的语句等效于:

($value = $a) xor $b;

你需要写:

$value = ($a xor $b);

$value = $a ^ $b;

^ 运算符是 bit-wise XOR,不是布尔值。但是 truefalse 将转换为 10,并且 bit-wise 结果将等同于布尔结果。但如果变量的原始值可能是数字,这将不起作用——所有 non-zero 数字都是真实的,但是当你对它们执行 bit-wise XOR 时,你会得到任何两个真实的结果不同的数字。

PHP Operator Precedence Table

查看相关内容Assignment in PHP with bool expression: strange behaviour