Curso de PHP
Operadores lógicos y de comparación en PHP
Por Víctor Peña · Publicado el

Hola, ¿cómo están? Continuando con el curso de PHP, hoy veremos los operadores de comparación y los operadores lógicos. Son los que permiten a un programa tomar decisiones, así que son la base de todo lo que viene en las próximas lecciones.
¡Empecemos!
Operadores de comparación
Comparan dos valores y devuelven siempre true o false.
<?php
$a = 10;
$b = 5;
var_dump($a > $b); // true mayor que
var_dump($a < $b); // false menor que
var_dump($a >= 10); // true mayor o igual
var_dump($a <= 9); // false menor o igual
var_dump($a == $b); // false igual
var_dump($a != $b); // true distinto
Hasta aquí no hay sorpresas. La sorpresa viene ahora.
La diferencia entre == y ===
Esto es lo más importante de esta lección, y la fuente número uno de errores difíciles de encontrar en PHP.
<?php
var_dump(5 == "5"); // true
var_dump(5 === "5"); // false
==compara solo el valor, y para hacerlo convierte los tipos si hace falta. Se le llama comparación laxa.===compara valor y tipo. Se le llama comparación estricta.
En el ejemplo, 5 es un número y "5" es una cadena de texto. Con == PHP convierte y dice que son iguales; con === reconoce que son cosas distintas.
Por qué importa de verdad
Mira este caso:
<?php
$respuesta = "0";
if ($respuesta == false) {
echo "Entra aquí"; // y entra
}
La cadena "0" se considera falsa en una comparación laxa. Situaciones así aparecen constantemente cuando lees datos de un formulario, porque todo lo que llega de un formulario es texto, aunque el usuario haya escrito un número.
La regla práctica: usa siempre === salvo que tengas una razón concreta para no hacerlo. Te va a ahorrar horas de depuración.
Lo mismo aplica al operador de desigualdad: prefiere !== sobre !=.
Valores que PHP considera falsos
Conviene tener esta lista presente, porque explica muchos comportamientos raros:
<?php
var_dump((bool) false); // false
var_dump((bool) 0); // false
var_dump((bool) 0.0); // false
var_dump((bool) ""); // false
var_dump((bool) "0"); // false
var_dump((bool) []); // false array vacío
var_dump((bool) null); // false
Todo lo demás es verdadero, incluidos "false", "0.0", -1 y " " (un espacio).
El operador nave espacial
Compara dos valores y devuelve -1, 0 o 1:
<?php
echo 1 <=> 2; // -1 el primero es menor
echo 2 <=> 2; // 0 son iguales
echo 3 <=> 2; // 1 el primero es mayor
Se llama así por su forma, <=>. Su uso real es ordenar arrays, y lo verás cuando lleguemos a esa lección.
Operadores lógicos
Combinan varias condiciones en una sola.
AND: se cumplen todas
<?php
$edad = 25;
$tieneCarnet = true;
if ($edad >= 18 && $tieneCarnet) {
echo "Puede conducir";
}
&& devuelve verdadero solo si ambas condiciones lo son.
OR: se cumple al menos una
<?php
$esAdmin = false;
$esEditor = true;
if ($esAdmin || $esEditor) {
echo "Puede editar el contenido";
}
|| devuelve verdadero si al menos una condición lo es.
NOT: invierte
<?php
$activo = false;
if (!$activo) {
echo "La cuenta está desactivada";
}
El ! invierte el resultado: convierte verdadero en falso y viceversa.
XOR: una sí, la otra no
<?php
var_dump(true xor false); // true
var_dump(true xor true); // false
Devuelve verdadero cuando exactamente una de las dos condiciones lo es. Se usa poco, pero conviene conocerlo.
&& o and: cuidado con la diferencia
PHP acepta también las palabras and, or y not, y parecen equivalentes. No lo son: tienen menor precedencia y eso puede darte resultados inesperados.
<?php
$resultado = true and false;
var_dump($resultado); // true, no false
Lo que ocurre es que la asignación = se resuelve antes que and, así que $resultado recibe true y el and false queda suelto.
Usa siempre && y ||. Las versiones en palabras existen por compatibilidad histórica y solo traen problemas.
Evaluación de cortocircuito
PHP deja de evaluar en cuanto conoce el resultado. Con &&, si la primera condición es falsa, la segunda ni se ejecuta:
<?php
if (isset($usuario) && $usuario->esAdmin()) {
// ...
}
Ese orden importa: si $usuario no existe, la segunda parte no llega a ejecutarse y no hay error. Al revés, el programa reventaría.
Es un patrón que vas a usar muchísimo. Comprueba primero que algo existe, después úsalo.
Combinar condiciones
Cuando mezclas && y ||, el && se evalúa primero. Igual que en aritmética, usa paréntesis:
<?php
$edad = 20;
$esSocio = false;
$esEstudiante = true;
if ($edad >= 18 && ($esSocio || $esEstudiante)) {
echo "Tiene descuento";
}
Sin los paréntesis, la condición significaría algo distinto.
Comparar cadenas de texto
Para comparar texto, === funciona bien, pero distingue mayúsculas:
<?php
var_dump("Hola" === "hola"); // false
// Comparación sin distinguir mayúsculas:
var_dump(strcasecmp("Hola", "hola") === 0); // true
Un ejemplo práctico
Validemos el acceso a una zona restringida:
<?php
$usuario = "victor";
$rol = "editor";
$activo = true;
$intentos = 2;
if ($activo && ($rol === "admin" || $rol === "editor") && $intentos < 3) {
echo "Acceso permitido";
} else {
echo "Acceso denegado";
}
Se lee casi como una frase: la cuenta está activa, y el rol es admin o editor, y no superó los intentos.
Para cerrar
Si te llevas una sola cosa de esta lección, que sea usar === en lugar de ==. Es el cambio de hábito que más errores evita en PHP.
En la siguiente lección usaremos todo esto dentro de estructuras condicionales.
Saludos y éxitos.
Norvic Software
Desarrollamos el software que tu empresa necesita
Somos una fábrica de software en Bolivia. Construimos sistemas a medida y aplicaciones móviles, y llevamos Inteligencia Artificial a las empresas que ya tienen un sistema funcionando.
- Chatbots con Inteligencia Artificial
- Creación de agentes de IA
- Integración de IA en tus sistemas
- Desarrollo de software a medida
- Aplicaciones móviles iOS y Android
- Consultoría y asesoramiento técnico
Cotización sin costo · Respuesta directa por WhatsApp