PHP xor返回错误的值

时间:2017-01-23 05:47:48

标签: php xor

使用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,而不是真。

1 个答案:

答案 0 :(得分:8)

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

($value = $a) xor $b;

你需要写:

$value = ($a xor $b);

$value = $a ^ $b;

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

请参阅PHP Operator Precedence Table

请参阅相关的Assignment in PHP with bool expression: strange behaviour