or
La palabra clave "or" en PHP crea disyunciones lógicas entre dos o más expresiones. Aprende su sintaxis, precedencia y uso práctico.
La palabra clave "or" en PHP
La palabra clave or es un operador lógico en PHP: combina dos expresiones booleanas y devuelve true cuando al menos una de ellas es verdadera. Es la forma escrita del operador || — ambos producen el mismo resultado lógico, pero difieren en precedencia de operadores, que es lo más importante que debes entender antes de usar or.
Esta página cubre la sintaxis de or, cómo su precedencia puede causar problemas en las asignaciones, su comportamiento de cortocircuito y cuándo usarías or en lugar de ||. Para el operador inverso, consulta and; para aplicar estas condiciones, consulta if e if / else / elseif.
Sintaxis
if ($expression1 or $expression2) {
// runs when either expression is true
}PHP evalúa primero $expression1. Si ya es verdadera, $expression2 nunca se evalúa (consulta Evaluación de cortocircuito más abajo). La expresión completa es true si alguno de los operandos es verdadero, y false solo cuando ambos son falsos.
$a | $b | $a or $b |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
or vs. || — la trampa de la precedencia
or y || significan lo mismo lógicamente, pero or tiene muy baja precedencia — menor que el operador de asignación =. Eso cambia cómo se analiza esta línea:
<?php
$a = false or true; // parsed as: ($a = false) or true
var_dump($a); // bool(false) ← surprising!
$b = false || true; // parsed as: $b = (false || true)
var_dump($b); // bool(true)Con or, la asignación ocurre antes de que or sea considerado, por lo que $a termina siendo false. Con ||, la comparación ocurre primero. Regla general: usa || dentro de asignaciones y expresiones; reserva or para el idioma de flujo de control mostrado a continuación.
Evaluación de cortocircuito
Al igual que ||, el operador or aplica cortocircuito: si el operando izquierdo es verdadero, PHP no evalúa el operando derecho. Esto permite omitir llamadas a funciones costosas — y es la base del patrón de guardia or die().
<?php
function check() {
echo "check() ran\n";
return true;
}
if (true or check()) {
echo "matched\n";
}
// Output:
// matched
// (check() never ran, so "check() ran" is NOT printed)Cuándo usar or
Debido a su baja precedencia, or destaca en un patrón de guardia "haz esto, o si no gestiona el fallo", donde quieres que la asignación/instrucción a la izquierda se vincule primero:
<?php
// Classic fallback idiom
$value = null;
$value or print("value was falsy\n"); // prints: value was falsy
// Common in legacy code (modern code prefers exceptions)
// $handle = fopen("data.txt", "r") or die("Cannot open file");Ejemplos
Veamos algunos ejemplos prácticos de cómo se puede usar la palabra clave "or":
Ejemplos de or en PHP
En estos ejemplos, or evalúa las condiciones de izquierda a derecha y se detiene tan pronto como una es true. Si ninguna coincide, el bloque de código se omite.
Ventajas y consideraciones
- Legibilidad: Escribir las condiciones en lenguaje natural (
if ($a or $b)) puede resultar más legible que||para los recién llegados. - Idioma de cláusula de guardia: Su baja precedencia hace que el patrón
expr or die(...)/expr or handle()sea conciso. - Ten cuidado: Esa misma baja precedencia hace que
orsea peligroso en asignaciones. Ante la duda, usa||.
Para una visión completa de cómo or se sitúa entre los operadores lógicos y demás operadores de PHP, consulta Operadores PHP. El operador complementario que requiere que ambas condiciones sean verdaderas es and.
Conclusión
La palabra clave or combina condiciones y devuelve true cuando alguna es verdadera. Se comporta como || lógicamente, pero tiene menor precedencia que =, por lo que se vincula después de la asignación — usa || dentro de expresiones y reserva or para instrucciones de tipo guardia. Combinado con la evaluación de cortocircuito, entender esta regla de precedencia te permite escribir PHP más seguro y claro.