Skip to content

3. Control de Flujo

El control de flujo es fundamental en cualquier lenguaje de programación, ya que permite tomar decisiones y repetir acciones según ciertas condiciones. En PHP, disponemos de varias estructuras para controlar el flujo de ejecución de nuestros scripts.

Las estructuras condicionales permiten ejecutar diferentes bloques de código dependiendo de si una condición se evalúa como verdadera o falsa.

La estructura if es la más básica para el control condicional. Ejecuta un bloque de código si la condición especificada es verdadera.

<?php
$edad = 18;
if ($edad >= 18) {
echo "Eres mayor de edad. Puedes acceder al contenido.";
}
?>

La estructura if-else permite ejecutar un bloque de código si la condición es verdadera y otro bloque diferente si es falsa.

<?php
$edad = 16;
if ($edad >= 18) {
echo "Eres mayor de edad. Puedes acceder al contenido.";
} else {
echo "Eres menor de edad. No puedes acceder al contenido.";
}
?>

Cuando necesitas evaluar múltiples condiciones, puedes usar la estructura if-elseif-else.

<?php
$calificacion = 85;
if ($calificacion >= 90) {
echo "Excelente! Tu calificación es A.";
} elseif ($calificacion >= 80) {
echo "Muy bien! Tu calificación es B.";
} elseif ($calificacion >= 70) {
echo "Bien. Tu calificación es C.";
} elseif ($calificacion >= 60) {
echo "Aprobado. Tu calificación es D.";
} else {
echo "Reprobado. Tu calificación es F.";
}
?>

El operador ternario es una forma abreviada de escribir una estructura if-else simple.

<?php
$edad = 20;
// Forma tradicional con if-else
if ($edad >= 18) {
$mensaje = "Mayor de edad";
} else {
$mensaje = "Menor de edad";
}
// Equivalente con operador ternario
$mensaje = ($edad >= 18) ? "Mayor de edad" : "Menor de edad";
echo $mensaje;
?>

El operador de fusión null (??) devuelve el primer operando si existe y no es NULL; de lo contrario, devuelve el segundo operando.

<?php
// Verificar si una variable está definida
$nombre = $_GET['nombre'] ?? 'Invitado';
// Equivalente a:
$nombre = isset($_GET['nombre']) ? $_GET['nombre'] : 'Invitado';
echo "Hola, $nombre!";
?>

La estructura switch es útil cuando necesitas comparar una variable con muchos valores diferentes.

<?php
$dia = 3;
switch ($dia) {
case 1:
echo "Lunes";
break;
case 2:
echo "Martes";
break;
case 3:
echo "Miércoles";
break;
case 4:
echo "Jueves";
break;
case 5:
echo "Viernes";
break;
case 6:
case 7:
echo "Fin de semana";
break;
default:
echo "Día inválido";
}
?>

Los bucles permiten ejecutar un bloque de código repetidamente mientras se cumpla una condición.

El bucle for se utiliza cuando sabes exactamente cuántas veces quieres ejecutar un bloque de código.

<?php
// Imprimir los números del 1 al 5
for ($i = 1; $i <= 5; $i++) {
echo "$i ";
}
// Salida: 1 2 3 4 5
echo "<br>";
// Imprimir los números pares del 2 al 10
for ($i = 2; $i <= 10; $i += 2) {
echo "$i ";
}
// Salida: 2 4 6 8 10
?>

El bucle while ejecuta un bloque de código mientras una condición especificada sea verdadera.

<?php
// Imprimir los números del 1 al 5
$i = 1;
while ($i <= 5) {
echo "$i ";
$i++;
}
// Salida: 1 2 3 4 5
echo "<br>";
// Ejemplo: Generar un número aleatorio hasta obtener un 5
$intentos = 0;
$numero = 0;
while ($numero != 5) {
$numero = rand(1, 10);
$intentos++;
echo "Intento $intentos: $numero<br>";
}
echo "Se obtuvo un 5 en $intentos intentos.";
?>

El bucle do-while es similar al bucle while, pero la condición se evalúa al final de cada iteración. Esto garantiza que el bloque de código se ejecute al menos una vez, incluso si la condición es falsa desde el principio.

<?php
// Imprimir los números del 1 al 5
$i = 1;
do {
echo "$i ";
$i++;
} while ($i <= 5);
// Salida: 1 2 3 4 5
echo "<br>";
// Ejemplo donde la condición es falsa desde el principio
$i = 10;
do {
echo "Este mensaje se muestra una vez aunque la condición sea falsa.";
$i++;
} while ($i <= 5);
?>

El bucle foreach está diseñado específicamente para iterar sobre arrays y objetos.

<?php
// Array indexado numéricamente
$colores = ["rojo", "verde", "azul", "amarillo"];
foreach ($colores as $color) {
echo "$color ";
}
// Salida: rojo verde azul amarillo
echo "<br>";
// Array asociativo
$persona = [
"nombre" => "Juan",
"edad" => 30,
"ciudad" => "Madrid",
"profesion" => "Desarrollador"
];
foreach ($persona as $clave => $valor) {
echo "$clave: $valor<br>";
}
// Salida:
// nombre: Juan
// edad: 30
// ciudad: Madrid
// profesion: Desarrollador
?>

PHP proporciona dos declaraciones especiales para controlar el flujo dentro de los bucles:

  • break: Sale inmediatamente del bucle actual
  • continue: Salta a la siguiente iteración del bucle
<?php
// Ejemplo de break
for ($i = 1; $i <= 10; $i++) {
if ($i == 5) {
echo "Encontramos el 5. Saliendo del bucle.";
break;
}
echo "$i ";
}
// Salida: 1 2 3 4 Encontramos el 5. Saliendo del bucle.
echo "<br>";
// Ejemplo de continue
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 == 0) {
continue; // Salta los números pares
}
echo "$i "; // Solo imprime números impares
}
// Salida: 1 3 5 7 9
?>

PHP permite incluir el contenido de otros archivos en un script. Esto es útil para reutilizar código y organizar mejor tus aplicaciones.

La declaración include incluye y evalúa el archivo especificado. Si el archivo no se encuentra, PHP emite una advertencia (warning) pero continúa ejecutando el script.

header.php
<?php
$titulo = "Mi Sitio Web";
?>
<!DOCTYPE html>
<html>
<head>
<title><?php echo $titulo; ?></title>
<meta charset="UTF-8">
</head>
<body>
<header>
<h1><?php echo $titulo; ?></h1>
<nav>
<ul>
<li><a href="index.php">Inicio</a></li>
<li><a href="acerca.php">Acerca de</a></li>
<li><a href="contacto.php">Contacto</a></li>
</ul>
</nav>
</header>
<main>

La declaración require es similar a include, pero si el archivo no se encuentra, PHP emite un error fatal y detiene la ejecución del script.

<?php
// Si config.php es esencial para la aplicación, usamos require
require 'config.php';
// Ahora podemos usar las variables de configuración
$conexion = new mysqli($db_host, $db_usuario, $db_password, $db_nombre);
?>

Estas variantes aseguran que un archivo se incluya solo una vez, lo que es útil para evitar redefiniciones de funciones o clases.

<?php
// Si funciones.php contiene definiciones de funciones
require_once 'funciones.php';
// En otra parte del código
require_once 'funciones.php'; // No causará problemas, el archivo no se incluirá dos veces
// Ahora podemos usar las funciones definidas
$resultado = sumar(5, 3);
echo "El resultado es: $resultado";
?>

Puedes usar rutas relativas o absolutas al incluir archivos:

<?php
// Ruta relativa al archivo actual
include 'includes/header.php';
// Ruta absoluta desde la raíz del servidor
include $_SERVER['DOCUMENT_ROOT'] . '/includes/config.php';
// Usando una constante predefinida para la ruta del directorio actual
include __DIR__ . '/includes/footer.php';
?>
🐝