使用php 7.1.0我正在运行这个小测试:
它又回来了,说不好.为什么?两个真值的xor应为FALSE,而不是true.
1> Barmar..:
问题是运营商优先级.该xor
运营商的优先级比=
,所以你的语句相当于:
($value = $a) xor $b;
你需要写:
$value = ($a xor $b);
要么
$value = $a ^ $b;
该^
操作是逐位异或,而不是布尔值.但是true
并且false
将被转换为1
和0
,并且逐位结果将等同于布尔结果.但是如果变量的原始值可能是数字,这将不起作用 - 所有非零数字都是真实的,但当你用它们执行逐位XOR时,你会得到任何两个不同的数字的真实结果.
请参阅PHP运算符优先级表
使用bool表达式查看PHP中的相关Assignment:奇怪的行为