W3docs

xor

Оператор xor в PHP — это логический оператор исключающего ИЛИ, который возвращает TRUE, если ровно одно из двух выражений истинно, а другое ложно.

Введение

Ключевое слово xor в PHP — это оператор логического исключающего ИЛИ. Он возвращает TRUE только тогда, когда ровно один из двух операндов равен TRUE, а другой — FALSE. Если оба операнда равны TRUE или оба равны FALSE, то xor возвращает FALSE. Это принципиальное отличие от оператора or, который возвращает TRUE при истинности любого из операндов или обоих сразу.

Простыми словами: xor отвечает на вопрос «верно ли ровно одно из этих условий, но не оба?»

На этой странице рассматриваются таблица истинности xor, запускаемый пример, его приоритет (и типичная ошибка с присваиванием, к которой он приводит), а также случаи, когда использование xor действительно оправдано.

Таблица истинности

Поведение xor полностью описывается четырьмя случаями:

$a$b$a xor $b
TRUETRUEFALSE
TRUEFALSETRUE
FALSETRUETRUE
FALSEFALSEFALSE

Обратите внимание: результат равен TRUE только в двух «смешанных» строках — именно это делает оператор исключающим.

Пример

Вот пример, демонстрирующий использование xor в PHP:

Пример использования ключевого слова xor в PHP

php— editable, runs on the server

В приведённом примере условие 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-значениями.

Практика

Практика
Каково значение логического оператора XOR (исключающее ИЛИ) в PHP?
Каково значение логического оператора XOR (исключающее ИЛИ) в PHP?
Was this page helpful?