Los programas no siempre ejecutan exactamente las mismas instrucciones. Muchas veces necesitan tomar decisiones según los datos disponibles: permitir o negar acceso, aplicar un descuento, mostrar un mensaje distinto o ejecutar una acción determinada.
En PHP estas decisiones se construyen mediante condicionales. En esta guía vamos a aprender cómo funcionan if, elseif, else, switch, match y el operador ternario.
¿Qué es una condición?
Una condición es una expresión que PHP puede evaluar como verdadera o falsa.
Por ejemplo:
$edad = 20; $edad >= 18
La expresión $edad >= 18 produce un valor booleano:
true
Ese resultado puede utilizarse para decidir qué bloque de código ejecutar.
Recordatorio: operadores de comparación
Las condiciones suelen construirse con operadores como:
==: igualdad flexible;===: igualdad estricta;!=: distinto;!==: distinto en valor o tipo;>: mayor;<: menor;>=: mayor o igual;<=: menor o igual.
La estructura if
if ejecuta un bloque de código solamente cuando una condición es verdadera.
<?php $edad = 20; if ($edad >= 18) { echo 'Es mayor de edad'; }
PHP evalúa primero:
$edad >= 18
Como el resultado es true, ejecuta el contenido entre llaves.
¿Qué representan las llaves?
Las llaves { } delimitan el bloque de instrucciones que pertenece al condicional.
if ($condicion) { echo 'Primera instrucción'; echo 'Segunda instrucción'; }
Si la condición es falsa, ninguna de esas instrucciones se ejecuta.
if y else
else permite definir qué debe ocurrir cuando la condición del if es falsa.
$edad = 16; if ($edad >= 18) { echo 'Es mayor de edad'; } else { echo 'Es menor de edad'; }
Solo uno de los dos bloques será ejecutado.
if, elseif y else
Cuando existen más de dos posibilidades podemos utilizar elseif.
$nota = 8; if ($nota >= 9) { echo 'Excelente'; } elseif ($nota >= 6) { echo 'Aprobado'; } else { echo 'Desaprobado'; }
PHP evalúa las condiciones de arriba hacia abajo y ejecuta el primer bloque cuya condición sea verdadera.
El orden de las condiciones importa
Este ejemplo está mal planteado:
if ($nota >= 6) { echo 'Aprobado'; } elseif ($nota >= 9) { echo 'Excelente'; }
Si la nota es 10, la primera condición ya es verdadera y PHP nunca llega al segundo bloque.
Por eso conviene ordenar primero las condiciones más específicas.
Condiciones compuestas
Podemos combinar varias condiciones mediante operadores lógicos.
AND con &&
$edad = 20; $tieneDocumento = true; if ($edad >= 18 && $tieneDocumento === true) { echo 'Puede ingresar'; }
Ambas condiciones deben ser verdaderas.
OR con ||
$esAdmin = false; $esSupervisor = true; if ($esAdmin || $esSupervisor) { echo 'Tiene permisos'; }
Alcanza con que una de las dos condiciones sea verdadera.
NOT con !
$bloqueado = false; if (!$bloqueado) { echo 'Usuario habilitado'; }
El operador ! invierte un valor booleano.
Usar paréntesis para expresar la lógica
Cuando combinamos varias condiciones, los paréntesis ayudan a dejar claro el orden de evaluación.
if (($edad >= 18 && $tieneDocumento) || $esAdmin) { echo 'Acceso permitido'; }
La intención resulta mucho más clara que en una expresión larga sin agrupación visual.
Comparación estricta dentro de condicionales
Cuando queremos comparar no solo el valor sino también el tipo, utilizamos ===.
$estado = '1'; if ($estado === 1) { echo 'Activo'; }
Este bloque no se ejecuta porque '1' es un string y 1 es un entero.
Valores truthy y falsy
PHP puede interpretar ciertos valores como verdaderos o falsos incluso si no son booleanos explícitos.
Por ejemplo, estos valores suelen evaluarse como falsos:
false;0;0.0;'';'0';null;- un array vacío.
Ejemplo:
$nombre = ''; if ($nombre) { echo 'Hay un nombre'; } else { echo 'El nombre está vacío'; }
Esto puede ser útil, pero también puede generar confusión. Cuando el tipo importa, conviene escribir condiciones explícitas.
switch
switch resulta útil cuando queremos comparar una misma variable contra varios valores posibles.
$estado = 'pendiente'; switch ($estado) { case 'pendiente': echo 'Pedido pendiente'; break; case 'pagado': echo 'Pedido pagado'; break; case 'cancelado': echo 'Pedido cancelado'; break; default: echo 'Estado desconocido'; }
¿Para qué sirve break?
break detiene la ejecución del switch una vez encontrada una coincidencia.
Si lo omitimos, PHP puede continuar ejecutando los siguientes casos. Este comportamiento se denomina fall-through.
default
default funciona como un caso alternativo cuando ningún case coincide.
Es comparable al else de una estructura if.
¿Cuándo conviene switch?
Puede ser más legible que muchos elseif cuando comparamos una misma variable contra valores concretos.
Por ejemplo, estados como:
pendiente pagado cancelado enviado
son un buen caso de uso.
match en PHP moderno
Desde PHP 8 existe match, una expresión más moderna para resolver ciertos casos similares a switch.
$estado = 'pagado'; $mensaje = match ($estado) { 'pendiente' => 'Pedido pendiente', 'pagado' => 'Pedido pagado', 'cancelado' => 'Pedido cancelado', default => 'Estado desconocido', }; echo $mensaje;
match devuelve un valor, por eso podemos asignar directamente su resultado a una variable.
Diferencias importantes entre switch y match
match tiene algunas ventajas:
- utiliza comparación estricta;
- no necesita
break; - devuelve un valor;
- suele ser más compacto.
Para código PHP moderno suele ser una alternativa muy clara cuando necesitamos mapear un valor a otro.
Operador ternario
El operador ternario permite expresar una decisión simple en una sola expresión.
$edad = 20; $mensaje = $edad >= 18 ? 'Mayor de edad' : 'Menor de edad'; echo $mensaje;
Su estructura es:
condición ? valor_si_true : valor_si_false
¿Cuándo usar el ternario?
Conviene utilizarlo para decisiones breves y fáciles de leer.
Si la condición se vuelve compleja, un if suele ser más claro.
Ternario corto
PHP también permite:
$nombreMostrado = $nombre ?: 'Sin nombre';
Si $nombre es evaluado como verdadero, se utiliza su valor. De lo contrario, se utiliza 'Sin nombre'.
Ternario corto vs operador ??
No hacen exactamente lo mismo.
$valor = $nombre ?: 'Sin nombre'; $valor = $nombre ?? 'Sin nombre';
?: utiliza el valor alternativo cuando el primero es falsy.
?? utiliza el alternativo solamente cuando la variable no existe o es null.
Ejemplo: sistema de descuentos
$total = 150000; $esClientePremium = true; if ($esClientePremium && $total >= 100000) { $descuento = 20; } elseif ($total >= 100000) { $descuento = 10; } else { $descuento = 0; } echo "Descuento: $descuento%";
Acá combinamos una condición numérica con una condición booleana.
Ejemplo: permisos de usuario
$rol = 'admin'; $activo = true; if ($activo && $rol === 'admin') { echo 'Acceso completo'; } elseif ($activo && $rol === 'editor') { echo 'Acceso de edición'; } else { echo 'Acceso limitado'; }
Errores comunes
- confundir
=con==o===; - ordenar mal los
elseif; - olvidar
breakdentro de unswitch; - escribir condiciones demasiado largas;
- abusar del operador ternario;
- no tener en cuenta los valores truthy y falsy;
- usar comparaciones flexibles cuando el tipo importa.
Ejercicios
- determinar si una persona es mayor de edad;
- indicar si un número es positivo, negativo o cero;
- clasificar una nota como desaprobada, aprobada o excelente;
- determinar si un número es par utilizando
%; - crear un sistema de descuento según importe;
- mostrar un mensaje diferente según el rol del usuario;
- resolver un estado de pedido con
switch; - reescribir ese mismo ejemplo utilizando
match; - mostrar “Activo” o “Inactivo” mediante un ternario;
- comparar el comportamiento de
?:y??.
Qué aprendimos
- qué es una condición;
- cómo funciona
if; elseyelseif;- condiciones compuestas;
- operadores lógicos;
- truthy y falsy;
switchybreak;match;- operador ternario;
- diferencias entre
?:y??.
¿Qué sigue?
En la próxima guía veremos bucles en PHP: for, while, do while y foreach, para repetir instrucciones de forma controlada.
¿Te sirvió esta guía? ☕
Si este contenido te ayudó y querés apoyar a Club Programador, podés colaborar mediante:
Descubre más desde Club Programador
Suscríbete y recibe las últimas entradas en tu correo electrónico.