Saltar al contenido
Portada » Lenguajes » 5. Estructuras de Control en PHP

5. Estructuras de Control en PHP

Introducción al capítulo

Estructuras de Control en PHP. En todo lenguaje de programación, las estructuras de control permiten modificar el flujo de ejecución de un programa. En PHP, estas estructuras nos permiten tomar decisiones (condicionales) o repetir bloques de código (bucles), lo cual es esencial para construir programas dinámicos, interactivos y eficientes. En este capítulo aprenderás a utilizar las distintas estructuras de control que PHP ofrece para lograr un comportamiento más inteligente y flexible en tus scripts.

5.1 Sentencias condicionales: if, else, elseif, switch

Las sentencias condicionales permiten ejecutar diferentes bloques de código dependiendo de ciertas condiciones.

🔸 if, else, elseif

La sentencia if evalúa una condición. Si es verdadera (true), ejecuta el bloque de código que contiene. Se puede complementar con else (para ejecutar un bloque alternativo si la condición es falsa) o con elseif para evaluar múltiples condiciones secuenciales.

Ejemplo:

$edad = 20;

if ($edad < 18) {
echo "Eres menor de edad.";
} elseif ($edad >= 18 && $edad < 65) {
echo "Eres un adulto.";
} else {
echo "Eres un adulto mayor.";
}

En este ejemplo:

  • Se evalúa si $edad es menor que 18.
  • Si no lo es, se evalúa si está entre 18 y 64.
  • Si no cumple ninguna condición anterior, se ejecuta el bloque else.

🔸 switch

Es útil cuando se desea comparar una variable con múltiples valores posibles.

Ejemplo:

$dia = "miércoles";

switch ($dia) {
case "lunes":
echo "Inicio de semana.";
break;
case "miércoles":
echo "Mitad de semana.";
break;
case "viernes":
echo "Fin de semana cercano.";
break;
default:
echo "Día no reconocido.";
}

🔹 Aquí switch compara $dia con cada case, ejecutando el primero que coincida. Es importante destacar que cuando una oción del case es verdadera, se ejecuta su apartado y continua evaluando las restantes opciones. En el caso de encontrar otra opción case que sea verdadera también la ejecutará. Si queremos salir y que no se evaluen el resto de condicionies, tendremos que utilizar la sentencia break. Esto hará que finalicen las coparaciones y y se ejecutará la sentencia que vaya al finalizar el swich.

Podemos además utilizar la opción default, este caso se ejecutará cuando ninguno de los casos anteriores haya sido cierto, y por tanto, se ejecutará este bloque de código.

5.2 Bucles: while, do...while, for, foreach

Los bucles son sentencias que nos permiten repetir bloques de código múltiples veces. Son unos de los pilares de cualquier lenguaje de programación. En PHP disponemos de distintas formas de poder ejecutar blucles de código, veamos cuales son.

🔸 while

Ejecuta un bloque de código mientras la condición sea verdadera. Primero evalúa la condición y en el caso de que sea verdadera entra a ejecutar el código incluido dentro del bucle.

$i = 1;
while ($i <= 5) {
echo "Número: $i <br>";
$i++;
}

🔸 do...while

Un bucle do-while difiere del while en que al menos se ejecuta al menos una vez, y luego se repite mientras la condición sea verdadera. O sea, primero entra en la ejecución del bucle y al final de él se evalúa la condición. En el caso de que sea cierta vuelve al inicio del bucle y si es falsa termina la ejecución y pasa a la siguiente línea de código.

$j = 1;
do {
echo "Contador: $j <br>";
$j++;
} while ($j <= 3);

🔸 for

Al igual que en los anteriores casos for es una sentencia para ejecutar múltiples veces un bloque de código. Es útil cuando se conoce de antemano cuántas veces se debe ejecutar el bloque.

for ($k = 1; $k <= 5; $k++) {
echo "Iteración $k <br>";
}

🔸 foreach

Diseñado para recorrer arrays. Es un bucle que nos permite recorrer los elementos de un array y ejecutar un bloque de código para manipular dicho array.

$nombres = ["Ana", "Luis", "Carlos"];
foreach ($nombres as $nombre) {
echo "Hola, $nombre <br>";
}

5.3 Uso de break y continue

Veamos ahora dos sentencias que nos permiten alterar la ejecución normal de ciertos bloques de código. Estas sentencias son break y continue.

¿Qué es break?

El break es una instrucción que se utiliza para salir inmediatamente de una estructura de control como switch, for, foreach, while, o do...while.

En el contexto de un switch, break impide que se ejecuten los siguientes bloques case una vez que se ha encontrado una coincidencia.

Ejemplo:

$dia = "miércoles";

switch ($dia) {
case "lunes":
echo "Hoy es lunes.";
break;
case "martes":
echo "Hoy es martes.";
break;
case "miércoles":
echo "Hoy es miércoles.";
break;
case "jueves":
echo "Hoy es jueves.";
break;
case "viernes":
echo "Hoy es viernes.";
break;
default:
echo "Es fin de semana.";
}

Salida:

Hoy es miércoles.

Explicación:

  • Se evalúa la variable $dia.
  • Cuando encuentra "miércoles", ejecuta ese bloque.
  • break detiene la ejecución del switch después de esa coincidencia.
  • Sin break, el switch seguiría ejecutando todos los case siguientes hasta encontrar un break o llegar al final.

¿Qué pasa si NO usas break?

$opcion = 1;

switch ($opcion) {
case 1:
echo "Opción 1 seleccionada. ";
case 2:
echo "Opción 2 seleccionada. ";
case 3:
echo "Opción 3 seleccionada.";
break;
default:
echo "Opción no válida.";
}

Salida:

Opción 1 seleccionada. Opción 2 seleccionada. Opción 3 seleccionada.

Explicación:
Como no hay break en los case 1 ni case 2, PHP continúa ejecutando todos los bloques siguientes, incluso si ya ha encontrado una coincidencia. Esto puede causar errores lógicos si no se desea ese comportamiento.


¿Qué es continue?

El continue se utiliza dentro de estructuras de bucle (for, while, foreach) para saltar a la siguiente iteración del bucle, sin ejecutar el resto del código en la iteración actual.

Importante: continue no se usa dentro de switch directamente, porque switch no es un bucle. Sin embargo, puede aparecer dentro de un switch que a su vez esté dentro de un bucle, y ahí sí tiene un efecto.


Ejemplo

$numeros = [0, 1, 2, 3, 4];

foreach ($numeros as $numero) {
switch ($numero) {
case 0:
echo "Cero no es válido. Saltando...\n";
continue 2; // Saltamos a la siguiente iteración del bucle 'foreach'
case 1:
case 2:
echo "Número bajo: $numero\n";
break;
case 3:
case 4:
echo "Número alto: $numero\n";
break;
}
}

Salida:

Cero no es válido. Saltando...
Número bajo: 1
Número bajo: 2
Número alto: 3
Número alto: 4

Explicación:

  • El valor 0 activa el continue 2. ¿Por qué «2»? Porque está dentro de dos estructuras de control (switch y foreach), y queremos que continue afecte al bucle externo, no solo al switch.
  • El resto de valores son evaluados normalmente por el switch.

¿Qué significa continue N?

continue puede recibir un número entero (continue 2, continue 3, etc.), que indica cuántos niveles de estructuras de control anidadas deben ser saltados. Por defecto es continue 1.


Resumen

Instrucción¿Dónde se usa?¿Qué hace?Ejemplo clave
breakswitch, buclesSale inmediatamente del bloque actualEvita la ejecución de los siguientes case
continueBuclesSalta a la siguiente iteración del bucleDentro de switch anidado en un bucle, usar continue N

Recapitulemos.

En este capítulo hemos aprendido a tomar decisiones y controlar el flujo de ejecución de tus programas PHP mediante estructuras de control:

  1. Condicionales (if, else, elseif): permiten ejecutar bloques de código dependiendo de si una condición se cumple o no.
  2. switch: útil cuando tienes múltiples condiciones que evaluar sobre el mismo valor. Su uso adecuado con break evita ejecuciones no deseadas.
  3. Bucles (while, do...while, for, foreach): permiten repetir instrucciones de forma controlada hasta que una condición se cumpla o deje de cumplirse.
  4. break: detiene la ejecución de una estructura como switch o bucle.
  5. continue: salta la iteración actual de un bucle y pasa a la siguiente.
  6. Vimos cómo break y continue se pueden aplicar correctamente dentro de switch, sobre todo si están dentro de bucles, con especial atención a la sintaxis continue 2.

Ejercicio 1: Clasificación de edad con if

Enunciado:
Escribe un programa que reciba la edad de una persona y clasifique si es niño, adolescente, adulto o adulto mayor.

Código:

$edad = 70;

if ($edad < 12) {
    echo "Es un niño.";
} elseif ($edad < 18) {
    echo "Es un adolescente.";
} elseif ($edad < 65) {
    echo "Es un adulto.";
} else {
    echo "Es un adulto mayor.";
}

Explicación:

  • Se evalúa la edad usando condiciones anidadas (elseif).
  • Cada condición define un rango específico de edad y ejecuta el mensaje correspondiente.
Ejercicio 2: Menú de opciones con switch

Enunciado:
Crea un menú de opciones con un número del 1 al 4 y utiliza switch para mostrar una opción distinta para cada número. Usa break para evitar ejecuciones en cascada.
Opciones del menú:
1. Ver Perfil
2. Configuración
3. Ayuda
4. Cerrar Sesión

Código:

$opcion = 3;

switch ($opcion) {
    case 1:
        echo "Has elegido la opción 1: Ver perfil.";
        break;
    case 2:
        echo "Has elegido la opción 2: Configuración.";
        break;
    case 3:
        echo "Has elegido la opción 3: Ayuda.";
        break;
    case 4:
        echo "Has elegido la opción 4: Cerrar sesión.";
        break;
    default:
        echo "Opción no válida.";
}

Explicación:

  • Cada case maneja una opción distinta del menú.
  • Se usa break en cada bloque para evitar que se ejecuten múltiples casos después de una coincidencia.
Ejercicio 3: Saltar números pares en un bucle foreach con continue y switch
Enunciado:
Dado un array del 1 al 5, imprime solo los números impares utilizando foreach, switch y continue.

Código:

$numeros = [1, 2, 3, 4, 5];

foreach ($numeros as $numero) {
    switch ($numero % 2) {
        case 0:
            // Número par
            continue 2; // Salta a la siguiente iteración del foreach
        case 1:
            // Número impar
            echo "Número impar: $numero\n";
            break;
    }
}

Explicación:

  • Se analiza si el número es par o impar con $numero % 2.
  • Si es par (case 0), se usa continue 2 para saltar la iteración completa del foreach.
  • Si es impar (case 1), se imprime el número.

Bibliografía de programación en PHP.

LogoPHP

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *