使用php 7.1.0我正在运行这个小测试:
<?php
$a = true;
$b = true;
$value = $a xor $b;
if ($value == true) {
print "bad!\n";
} else {
print "good\n";
}
然后又回来说坏话。为什么?两个真值的xor应为FALSE,而不是真。
答案 0 :(得分:8)
问题是运营商优先级。 xor
运算符的优先级低于=
,因此您的语句等同于:
($value = $a) xor $b;
你需要写:
$value = ($a xor $b);
或
$value = $a ^ $b;
^
运算符是按位XOR,而不是布尔值。但true
和false
将转换为1
和0
,并且逐位结果将等效于布尔结果。但是如果变量的原始值可能是数字,这将不起作用 - 所有非零数字都是真实的,但是当你用它们执行逐位XOR时,你会得到任何两个不同的数字的真实结果
请参阅PHP Operator Precedence Table
请参阅相关的Assignment in PHP with bool expression: strange behaviour