Apuntes php

PHP: Porque a veces necesitas un poco de caos en tu vida.

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";
}
?>
TOP