【问题标题】:PHP xor returns wrong valuePHP xor 返回错误值
【发布时间】:2017-06-07 14:02:53
【问题描述】:

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

<?php

$a = true;
$b = true;

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

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

【问题讨论】:

    标签: php xor


    【解决方案1】:

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

    ($value = $a) xor $b;
    

    你需要写:

    $value = ($a xor $b);
    

    $value = $a ^ $b;
    

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

    PHP Operator Precedence Table

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

    【讨论】:

    • @Gargoyle 大概是为了与andor 保持一致。不同之处在于它们还有&amp;&amp;||的变体,具有更高的优先级,但没有xor的高优先级变体。
    • 你可以使用^,它是具有更高优先级的异或。
    • @PaulCrovella ^ 是二进制 XOR,而不是布尔值。
    • 操作数将转换为整数,使用布尔值给出预期结果。
    • 而且 XOR 不能做短路。这是布尔运算符和二元运算符之间的另一个区别,但与 XOR 无关。
    猜你喜欢
    • 2013-10-03
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多