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 двух истинных значений должен быть ЛОЖНЫМ, а не истинным.

5

Решение

Проблема в приоритете операторов. xor оператор имеет более низкий приоритет, чем =так что ваше утверждение эквивалентно:

($value = $a) xor $b;

Вам нужно написать:

$value = ($a xor $b);

или же

$value = $a ^ $b;

^ оператор является побитовым XOR, а не логическим. Но true а также false будет преобразован в 1 а также 0и побитовые результаты будут эквивалентны логическим результатам. Но это не сработает, если исходные значения переменных могут быть числами — все ненулевые числа являются правдивыми, но когда вы выполняете битовое XOR с ними, вы получите достоверный результат для любых двух чисел, которые отличаются ,

Увидеть Таблица приоритетов операторов PHP

Смотрите связанные Назначение в PHP с выражением bool: странное поведение

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]