W3docs

xor

A palavra-chave xor no PHP é um operador lógico que retorna TRUE se apenas uma das duas expressões for TRUE e a outra for FALSE.

Introdução

A palavra-chave xor no PHP é o operador lógico ou-exclusivo. Ela retorna TRUE apenas quando exatamente um dos seus dois operandos é TRUE e o outro é FALSE. Se ambos os operandos forem TRUE, ou ambos forem FALSE, então xor retorna FALSE. Essa é a principal diferença em relação ao operador or, que retorna TRUE sempre que um ou ambos os operandos forem TRUE.

Em termos simples: xor responde à pergunta "um desses é verdadeiro, mas não ambos?"

Esta página aborda a tabela verdade do xor, um exemplo executável, sua precedência (e a armadilha comum de atribuição que ela causa), e quando faz sentido usar xor.

Tabela verdade

O comportamento do xor é descrito completamente por estes quatro casos:

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

Observe que o resultado é TRUE apenas nas duas linhas "mistas" — é isso que o torna exclusivo.

Exemplo

Aqui está um exemplo que demonstra o uso do xor no PHP:

Exemplo da palavra-chave xor no PHP

php— editable, runs on the server

No exemplo acima, a instrução if será avaliada como TRUE porque $x > 0 é TRUE e $y > 10 é FALSE. Portanto, a saída do código será: "One of the expressions is true and the other is false".

Vale notar que xor tem uma precedência menor do que os operadores and e or, por isso é importante usar parênteses para agrupar expressões adequadamente quando necessário.

Precedência e a armadilha de atribuição

Os operadores por palavra and, or e xor têm precedência menor do que o operador de atribuição (=). Isso pega as pessoas de surpresa: em $result = true xor false, a atribuição é ligada primeiro, então o PHP avalia como ($result = true) xor false. O xor é aplicado depois que o valor já foi atribuído, e seu resultado é descartado.

<?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)

A regra prática: quando você quer que o resultado de uma expressão xor seja armazenado em uma variável, envolva a expressão em parênteses. Se você só precisa do xor dentro de uma condição if (como no exemplo acima), o problema não ocorre.

Para a tabela de precedência completa e os operadores simbólicos (&&, ||, !), consulte Operadores PHP.

Mais Informações

Aqui estão mais informações sobre o operador xor no PHP:

  • O operador xor também é chamado de operador "ou exclusivo" porque retorna TRUE apenas se uma das expressões for TRUE e a outra for FALSE, mas não se ambas forem TRUE ou ambas forem FALSE.
  • O operador xor converte automaticamente seus operandos em valores boolean antes da avaliação, seguindo as regras padrão de coerção de tipos do PHP.
  • O operador xor pode ser útil em situações em que você precisa verificar que apenas uma de duas condições é verdadeira, mas não ambas. Por exemplo, se você tem duas caixas de seleção em um formulário e quer garantir que o usuário selecione apenas uma delas, pode usar xor para validar a entrada.
  • Ao contrário de and e or, o operador xor não realiza curto-circuito; ambos os operandos são sempre avaliados independentemente do valor do primeiro operando.
  • O operador xor pode ser combinado com outros operadores como == ou != para criar expressões mais complexas. Por exemplo, você pode usar ($x == $y) xor ($a != $b) para verificar que ou $x é igual a $y ou $a não é igual a $b, mas não ambos. Tais expressões são mais frequentemente colocadas dentro de uma instrução if.
  • Note que xor é um operador lógico. Para operações XOR bit a bit (alternar bits individuais de um inteiro), use o operador ^ em vez disso.
  • Os operadores por palavra relacionados são and e or. O PHP também fornece as formas simbólicas && e ||, que têm maior precedência do que seus equivalentes por palavra.
  • Vale notar que o operador xor não é comumente usado na programação PHP, e você pode descobrir que pode obter os mesmos resultados usando outros operadores ou estruturas de controle. No entanto, pode ser uma ferramenta útil em certas situações onde você precisa realizar operações lógicas em valores boolean.

Prática

Prática
Qual é o significado do operador lógico XOR (Ou Exclusivo) no PHP?
Qual é o significado do operador lógico XOR (Ou Exclusivo) no PHP?
Was this page helpful?