W3docs

xor

La palabra clave xor en PHP es un operador lógico que devuelve TRUE si una de las dos expresiones es TRUE y la otra es FALSE, pero no ambas.

Introducción

La palabra clave xor en PHP es el operador lógico OR exclusivo. Devuelve TRUE solo cuando exactamente uno de sus dos operandos es TRUE y el otro es FALSE. Si ambos operandos son TRUE, o ambos son FALSE, entonces xor devuelve FALSE. Esta es la diferencia clave respecto al operador or, que devuelve TRUE cuando uno o ambos operandos son TRUE.

En términos simples: xor responde a la pregunta "¿es verdadero uno de estos, pero no los dos?"

Esta página cubre la tabla de verdad de xor, un ejemplo ejecutable, su precedencia (y el problema habitual con la asignación que esto provoca) y cuándo tiene sentido utilizar xor.

Tabla de verdad

El comportamiento de xor queda completamente descrito por estos cuatro casos:

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

Observe que el resultado es TRUE solo en las dos filas "mixtas" — eso es lo que lo hace exclusivo.

Ejemplo

A continuación se muestra un ejemplo que demuestra el uso de xor en PHP:

Ejemplo de la palabra clave xor en PHP

php— editable, runs on the server

En el ejemplo anterior, la sentencia if se evaluará como TRUE porque $x > 0 es TRUE y $y > 10 es FALSE. Por lo tanto, la salida del código será: "One of the expressions is true and the other is false".

Vale la pena señalar que xor tiene una precedencia menor que los operadores and y or, por lo que es importante usar paréntesis para agrupar las expresiones correctamente si es necesario.

Precedencia y el problema con la asignación

Los operadores de palabra and, or y xor tienen todos una precedencia menor que el operador de asignación (=). Esto confunde a muchos: en $result = true xor false, la asignación se vincula primero, por lo que PHP lo evalúa como ($result = true) xor false. El xor se aplica después de que el valor ya ha sido asignado, y su resultado se descarta.

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

La regla general: cuando quiera almacenar el resultado de una expresión xor en una variable, envuelva la expresión entre paréntesis. Si solo necesita xor dentro de una condición if (como en el ejemplo anterior), el problema no surge.

Para la tabla de precedencia completa y los operadores simbólicos (&&, ||, !), consulte Operadores PHP.

Más información

Aquí hay información adicional sobre el operador xor en PHP:

  • El operador xor también se denomina operador "OR exclusivo" porque devuelve TRUE solo si una de las expresiones es TRUE y la otra es FALSE, pero no si ambas son TRUE o ambas son FALSE.
  • El operador xor convierte automáticamente sus operandos a valores boolean antes de la evaluación, siguiendo las reglas estándar de manipulación de tipos de PHP.
  • El operador xor puede ser útil en situaciones donde necesita verificar que solo una de dos condiciones sea verdadera, pero no ambas. Por ejemplo, si tiene dos casillas de verificación en un formulario y desea asegurarse de que el usuario seleccione solo una de ellas, puede usar xor para validar la entrada.
  • A diferencia de and y or, el operador xor no realiza evaluación en cortocircuito; ambos operandos se evalúan siempre, independientemente del valor del primer operando.
  • El operador xor se puede combinar con otros operadores como == o != para crear expresiones más complejas. Por ejemplo, puede usar ($x == $y) xor ($a != $b) para verificar que $x sea igual a $y o que $a no sea igual a $b, pero no ambos. Dichas expresiones se colocan con mayor frecuencia dentro de una sentencia if.
  • Tenga en cuenta que xor es un operador lógico. Para operaciones XOR a nivel de bits (alternar bits individuales de un entero), use el operador ^ en su lugar.
  • Los operadores de palabra relacionados son and y or. PHP también proporciona las formas simbólicas && y ||, que tienen mayor precedencia que sus equivalentes de palabra.
  • Vale la pena señalar que el operador xor no se usa comúnmente en la programación PHP, y puede encontrar que puede lograr los mismos resultados utilizando otros operadores o estructuras de control. Sin embargo, puede ser una herramienta útil en ciertas situaciones donde necesita realizar operaciones lógicas sobre valores Boolean.

Práctica

Práctica
¿Cuál es el significado del operador lógico XOR (OR exclusivo) en PHP?
¿Cuál es el significado del operador lógico XOR (OR exclusivo) en PHP?
Was this page helpful?