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 |
|---|---|---|
TRUE | TRUE | FALSE |
TRUE | FALSE | TRUE |
FALSE | TRUE | TRUE |
FALSE | FALSE | FALSE |
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
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
xortambién se denomina operador "OR exclusivo" porque devuelveTRUEsolo si una de las expresiones esTRUEy la otra esFALSE, pero no si ambas sonTRUEo ambas sonFALSE. - El operador
xorconvierte 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
xorpuede 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 usarxorpara validar la entrada. - A diferencia de
andyor, el operadorxorno realiza evaluación en cortocircuito; ambos operandos se evalúan siempre, independientemente del valor del primer operando. - El operador
xorse 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$xsea igual a$yo que$ano sea igual a$b, pero no ambos. Dichas expresiones se colocan con mayor frecuencia dentro de una sentenciaif. - Tenga en cuenta que
xores 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
andyor. 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
xorno 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.