Lección: Estructuras de Control en PHP
Las estructuras de control permiten al script tomar decisiones lógicas, como “si llueve, coge el paraguas; si hace sol, vete a la playa”. En PHP, tienes varias herramientas para controlar el flujo del programa, desde condicionales hasta bucles.
Estructuras disponibles
PHP ofrece las siguientes estructuras de control:
if
,else
,elseif
: Condiciones simples o múltiples.switch
: Evalúa una variable contra varios valores.while
,do/while
: Bucles que repiten mientras se cumpla una condición.for
,foreach
: Bucles para iterar un número fijo de veces o sobre arrays.
if, else
La estructura if
evalúa una condición entre paréntesis.
Si es true
, ejecuta un bloque de código; si es
false
, ignora el bloque. Con else
, puedes especificar
qué hacer si la condición no se cumple:
<?php
$edad = 17;
if ($edad >= 18) {
echo "Puedes sacar el coche\n";
} else {
echo "Ve en autobús\n";
}
?>
Nota: else
es opcional y no puede tener condiciones adicionales (por ejemplo, else ($otra_condicion)
es inválido).
Usa llaves {}
para bloques de varias líneas, pero son opcionales para
una sola línea:
<?php
$user = "pepe";
if ($user === "pepe")
echo "Bienvenido, Pepe\n";
?>
Condiciones complejas
Usa operadores lógicos (&&
, ||
,
!
) y paréntesis para condiciones más avanzadas:
<?php
$edad = 20;
$carnet_conducir = 1;
if (($edad >= 18) && ($carnet_conducir === 1)) {
echo "Puedes conducir\n";
}
?>
Nota sobre casting: Si una variable puede tener tipos mixtos (por ejemplo, de un formulario), fuerza el tipo con (int)
o (string)
para comparaciones precisas:
<?php
$edad = "20"; // De un formulario
if ((int)$edad >= 18) {
echo "Mayor de edad\n";
}
?>
if, elseif, else
Evalúa múltiples condiciones con elseif
(o
else if
, que es equivalente):
<?php
$user = "juan";
if ($user === "pepe") {
echo "Código para Pepe\n";
} elseif ($user === "juan") {
echo "Código para Juan\n";
} else {
echo "Código para otros\n";
}
?>
Operador ternario
El operador ternario es una forma abreviada de if/else
para condiciones simples:
(condición) ? valor_si_verdadera : valor_si_falsa
:
<?php
$num = 1;
$resultado = ($num === 1) ? "$num es igual a 1" : "$num no es igual a 1";
echo "$resultado\n";
?>
Equivale a:
<?php
$num = 1;
if ($num === 1) {
$resultado = "$num es igual a 1";
} else {
$resultado = "$num no es igual a 1";
}
echo "$resultado\n";
?>
Otro ejemplo:
<?php
$edad = 18;
$mensaje = ($edad >= 18) ? "coge el coche." : "ve en autobús.";
echo $mensaje; // coge el coche
?>
switch
switch
es una alternativa legible para comparar una
variable contra múltiples valores:
<?php
$op = "a";
switch ($op) {
case "a":
echo "Opción A seleccionada\n";
break;
case "b":
echo "Opción B seleccionada\n";
break;
case "c":
echo "Opción C seleccionada\n";
break;
default:
echo "Opción no válida\n";
// $op === "a", muestra "Opción A seleccionada"
}
?>
Nota: : Usa break;
para salir del
switch
tras cada caso; sin él, se ejecutarían los casos
siguientes.
default
es opcional y maneja casos no
contemplados.
Sintaxis alternativa
Para if
, elseif
, y else
,
puedes usar :
y endif
en lugar de llaves, útil
en plantillas HTML:
<?php
$user = "pepe";
if ($user === "pepe"):
echo "Código para Pepe\n";
elseif ($user === "juan"):
echo "Código para Juan\n";
else:
echo "Código para otros\n";
endif;
?>
Bucles: while
Los bucles repiten código mientras se cumpla una condición.
while
evalúa la condición antes de cada iteración:
<?php
$i = 1;
while ($i <= 10) {
echo "$i\n";
$i++;
// 1 2 3 4 5 6 7 8 9 10
}
?>
Nota: Inicializa la variable de control
($i = 1
). - Asegúrate de que la condición eventualmente sea
false
($i++
), o crearás un bucle infinito.
Sintaxis alternativa: while ... endwhile
:
<?php
$i = 1;
while ($i <= 10):
echo "$i\n";
$i++;
endwhile;
// 1 2 3 4 5 6 7 8 9 10
?>
do/while
do/while
ejecuta el código al menos una vez, evaluando
la condición después:
<?php
$i = 11;
do {
echo "$i\n"; // Se ejecuta una vez, aunque $i > 10
$i++;
} while ($i <= 10);
// 11
?>
for
for
es ideal para iteraciones con un número fijo de
repeticiones: for(inicio; condición; incremento)
:
<?php
for ($i = 1; $i <= 10; $i++) {
echo "$i\n";
}
?>
Nota: Inicio: Inicializa la
variable ($i = 1
). - Condición: Se evalúa
antes de cada iteración ($i <= 10
). -
Incremento: Se ejecuta tras cada iteración
($i++
).
Sintaxis alternativa: for ... endfor
:
<?php
for ($i = 1; $i <= 10; $i++):
echo "$i\n";
endfor;
?>
foreach
foreach
itera sobre arrays (visto en la lección de
arrays):
<?php
$ciudades = ["Madrid", "Barcelona"];
foreach ($ciudades as $ciudad) {
echo "$ciudad\n";
}
// Madrid Barcelona
?>
O con claves y valores:
<?php
$capitales = ["España" => "Madrid"];
foreach ($capitales as $pais => $capital) {
echo "$pais: $capital\n";
}
// España: Madrid
?>
Operadores de comparación
Usa operadores estrictos (===
, !==
) para
evitar errores con tipos mixtos:
<?php
$valor = "1";
if ($valor === 1) {
echo "Igual en valor y tipo\n";
} else {
echo "Diferente en valor o tipo\n";
}
?>
El operador spaceship (<=>
)
compara dos valores, devolviendo -1
(menor), 0
(igual), o 1
(mayor):
<?php
$num = 5;
$resultado = ($num <=> 10); // -1 (5 < 10)
echo "$resultado\n";
?>
Comprobación de variables en condiciones: isset(), empty(), is_null()
En PHP, muchas decisiones en tiempo de ejecución dependen del contenido o existencia de variables. Por eso, al usar estructuras de control como if
, else
o switch
, es fundamental asegurarse de que las variables involucradas estén definidas y tengan un valor válido.
PHP ofrece funciones específicas para este propósito, que se utilizan habitualmente dentro de condiciones:
Función | Devuelve true si... |
Uso habitual |
---|---|---|
isset($var) |
La variable está definida y no es null |
if (isset($_POST["nombre"])) |
empty($var) |
La variable no tiene valor útil: "" , 0 , null , false , [] , etc. |
if (empty($_GET["buscar"])) |
is_null($var) |
La variable vale exactamente null |
if (is_null($resultado)) |
Estas funciones no alteran el flujo de un programa por sí mismas, pero se combinan con estructuras condicionales para tomar decisiones seguras, especialmente al trabajar con formularios o entrada de datos externos.
Ejemplo: validar una entrada opcional
<?php
// Supongamos que el formulario POST puede contener un campo "nombre"
$nombre = $_POST["nombre"] ?? null;
if (!isset($nombre)) {
echo "No se envió el campo 'nombre'.";
} elseif (empty($nombre)) {
echo "El nombre está vacío.";
} else {
echo "Hola, $nombre";
}
?>