我正在使用 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;
^
运算符是按位异或,而不是 bool 值。但是 true
和 false
将被转换为 1
和 0
,并且按位结果将等同于 bool 结果。但如果变量的原始值可能是数字,这将不起作用——所有非零数字都是真实的,但是当你对它们执行按位异或时,你会得到任何两个不同数字的真实结果.
参见 PHP Operator Precedence Table
查看相关Assignment in PHP with bool expression: strange behaviour
关于PHP xor 返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41799954/