Las estructuras de control deciden qué código se ejecuta y cuántas veces. Son pocas y parecen simples,
pero usarlas bien marca la diferencia entre un código que se lee de un vistazo y uno lleno de
if anidados. En el libro PHP desde cero hasta experto tienen su propio
capítulo; aquí repasamos lo esencial con las novedades de PHP 8.
Condicionales: if, elseif, else
<?php
$stock = 3;
if ($stock === 0) {
$estado = 'Agotado';
} elseif ($stock < 5) {
$estado = 'Últimas unidades';
} else {
$estado = 'Disponible';
}
// Ternario: para elegir entre dos valores en una línea
$etiqueta = $stock > 0 ? 'En stock' : 'Sin stock';
El ternario es útil para casos simples. Si necesitas anidar uno dentro de otro, vuelve al
if o usa match: PHP 8 incluso prohíbe anidar ternarios sin paréntesis porque
el resultado era confuso.
match: el switch moderno de PHP 8
match es una expresión: devuelve un valor. Compara con ===,
no necesita break y lanza un error si ningún caso coincide, en lugar de seguir en silencio.
<?php
$estadoPedido = 'enviado';
// Con switch: verboso y fácil de romper si olvidas un break
switch ($estadoPedido) {
case 'pendiente':
$texto = 'Estamos preparando tu pedido';
break;
case 'enviado':
$texto = 'Tu pedido está en camino';
break;
default:
$texto = 'Estado desconocido';
}
// Con match: una expresión, comparación estricta y varios valores por caso
$texto = match ($estadoPedido) {
'pendiente', 'pagado' => 'Estamos preparando tu pedido',
'enviado' => 'Tu pedido está en camino',
'entregado' => '¡Entregado!',
default => 'Estado desconocido',
};
match con condiciones
Con match (true) cada rama puede ser una condición, una alternativa muy legible a una
cadena de elseif:
<?php
$nota = 7.5;
$calificacion = match (true) {
$nota >= 9 => 'Sobresaliente',
$nota >= 7 => 'Notable',
$nota >= 5 => 'Aprobado',
default => 'Desaprobado',
};
echo $calificacion; // Notable
default y ningún caso coincide, match lanza un
UnhandledMatchError. Es una ventaja: un valor inesperado se detecta de inmediato en lugar
de producir un resultado incorrecto.
Bucles: foreach, for y while
<?php
$productos = [
['nombre' => 'Teclado', 'precio' => 45000],
['nombre' => 'Mouse', 'precio' => 18000],
];
// foreach: el bucle por defecto para arrays
foreach ($productos as $i => $p) {
echo ($i + 1) . ". {$p['nombre']}: \${$p['precio']}\n";
}
// for: cuando necesitas un contador
for ($i = 10; $i > 0; $i--) {
echo $i, ' ';
}
// while: mientras se cumpla una condición (p. ej., leer filas de una consulta)
$intentos = 0;
while ($intentos < 3) {
$intentos++;
}
// continue salta a la siguiente vuelta; break sale del bucle
foreach ($productos as $p) {
if ($p['precio'] > 40000) {
continue;
}
echo $p['nombre'];
}
Menos anidación con returns tempranos
Un patrón que mejora muchísimo la legibilidad: comprobar primero los casos de error y salir, para que el camino principal quede sin anidar.
<?php
// Antes: la lógica importante queda enterrada
function procesarPedido(?array $pedido): string
{
if ($pedido !== null) {
if ($pedido['items']) {
if ($pedido['pagado']) {
return 'Pedido enviado';
} else {
return 'Falta el pago';
}
} else {
return 'Pedido vacío';
}
} else {
return 'Pedido inexistente';
}
}
// Después: primero los errores, luego el caso normal
function procesarPedidoClaro(?array $pedido): string
{
if ($pedido === null) return 'Pedido inexistente';
if (!$pedido['items']) return 'Pedido vacío';
if (!$pedido['pagado']) return 'Falta el pago';
return 'Pedido enviado';
}
Errores comunes
- Asignar en lugar de comparar:
if ($x = 5)siempre es verdadero. Algunos programadores escribenif (5 === $x)para que el error salte de inmediato. - Olvidar el
breaken unswitch: la ejecución “cae” al caso siguiente. Otra razón para preferirmatch. - Referencias en
foreach: trasforeach ($a as &$v),$vsigue apuntando al último elemento. Hazunset($v)después, o evita las referencias. - Bucles infinitos con
while: asegúrate de que la condición cambia en cada vuelta.
Con condicionales y bucles dominados, el siguiente paso natural es agruparlos en funciones reutilizables.
Aprende a pensar como programador
Las estructuras de control tienen su propio capítulo en el libro PHP desde cero hasta experto, con ejercicios que preparan el terreno para formularios y bases de datos.
Comprar en Amazon