xor
Оператор xor в PHP — это логический оператор исключающего ИЛИ, который возвращает TRUE, если ровно одно из двух выражений истинно, а другое ложно.
Введение
Ключевое слово xor в PHP — это оператор логического исключающего ИЛИ. Он возвращает TRUE только тогда, когда ровно один из двух операндов равен TRUE, а другой — FALSE. Если оба операнда равны TRUE или оба равны FALSE, то xor возвращает FALSE. Это принципиальное отличие от оператора or, который возвращает TRUE при истинности любого из операндов или обоих сразу.
Простыми словами: xor отвечает на вопрос «верно ли ровно одно из этих условий, но не оба?»
На этой странице рассматриваются таблица истинности xor, запускаемый пример, его приоритет (и типичная ошибка с присваиванием, к которой он приводит), а также случаи, когда использование xor действительно оправдано.
Таблица истинности
Поведение xor полностью описывается четырьмя случаями:
$a | $b | $a xor $b |
|---|---|---|
TRUE | TRUE | FALSE |
TRUE | FALSE | TRUE |
FALSE | TRUE | TRUE |
FALSE | FALSE | FALSE |
Обратите внимание: результат равен TRUE только в двух «смешанных» строках — именно это делает оператор исключающим.
Пример
Вот пример, демонстрирующий использование xor в PHP:
Пример использования ключевого слова xor в PHP
В приведённом примере условие if будет равно TRUE, поскольку $x > 0 равно TRUE, а $y > 10 равно FALSE. Поэтому результат выполнения кода будет: "One of the expressions is true and the other is false".
Важно отметить, что xor имеет более низкий приоритет, чем операторы and и or, поэтому при необходимости следует использовать круглые скобки для правильной группировки выражений.
Приоритет и ошибка с присваиванием
Словесные операторы and, or и xor имеют более низкий приоритет, чем оператор присваивания (=). Это часто вводит в заблуждение: в выражении $result = true xor false присваивание связывается первым, поэтому PHP вычисляет его как ($result = true) xor false. Оператор xor применяется после того, как значение уже было присвоено, и его результат отбрасывается.
<?php
// = binds tighter than xor, so this is ($result = true) xor false
$result = true xor false;
var_dump($result); // bool(true) — the xor never affects $result
// Use parentheses to get the value you expect
$result = (true xor false);
var_dump($result); // bool(true)
$result = (true xor true);
var_dump($result); // bool(false)Практическое правило: если вы хотите сохранить результат выражения с xor в переменную, оберните выражение в круглые скобки. Если xor используется только внутри условия if (как в примере выше), эта проблема не возникает.
Полная таблица приоритетов и символьные операторы (&&, ||, !) описаны на странице PHP Operators.
Дополнительная информация
Несколько дополнительных сведений об операторе xor в PHP:
- Оператор
xorтакже называют оператором «исключающего ИЛИ», потому что он возвращаетTRUEтолько если одно из выражений равноTRUE, а другое —FALSE, но не в случае, когда оба равныTRUEили оба равныFALSE. - Перед вычислением
xorавтоматически приводит свои операнды к логическим значениям по стандартным правилам приведения типов PHP. - Оператор
xorможет быть полезен в ситуациях, когда нужно убедиться, что истинно только одно из двух условий, но не оба. Например, если на форме есть два флажка и нужно гарантировать, что пользователь выбрал только один из них, можно использоватьxorдля проверки ввода. - В отличие от
andиor, операторxorне поддерживает сокращённое вычисление; оба операнда всегда вычисляются независимо от значения первого. - Оператор
xorможно комбинировать с другими операторами, такими как==или!=, для создания более сложных выражений. Например,($x == $y) xor ($a != $b)проверяет, что либо$xравно$y, либо$aне равно$b, но не оба условия одновременно. Такие выражения чаще всего помещают внутрь оператораif. - Обратите внимание:
xorявляется логическим оператором. Для побитовых операций XOR (переключения отдельных битов целого числа) используйте оператор^. - Связанные словесные операторы:
andиor. PHP также предоставляет символьные формы&&и||, которые имеют более высокий приоритет, чем их словесные аналоги. - Стоит отметить, что оператор
xorне часто используется в программировании на PHP, и нередко тех же результатов можно достичь с помощью других операторов или управляющих структур. Тем не менее он может быть полезным инструментом в определённых ситуациях, когда необходимо выполнять логические операции над boolean-значениями.