Curso de PHP

Estructuras condicionales if else en PHP

Por Víctor Peña · Publicado el

Estructuras condicionales if else en PHP

Hola, ¿cómo están? Continuando con el curso de PHP, hoy veremos las estructuras condicionales. Con lo que aprendimos sobre operadores de comparación, ya podemos hacer que nuestros programas tomen decisiones.

¡Empecemos!

Qué es una estructura condicional

Una estructura condicional permite ejecutar un bloque de código solo si se cumple una condición. Es la diferencia entre un programa que siempre hace lo mismo y uno que reacciona a los datos.

La estructura if

La más simple. Si la condición es verdadera, se ejecuta el bloque; si no, se salta.

<?php
$edad = 20;

if ($edad >= 18) {
    echo "Eres mayor de edad";
}

La condición va entre paréntesis y el bloque entre llaves.

if else

Cuando queremos hacer una cosa u otra:

<?php
$edad = 15;

if ($edad >= 18) {
    echo "Puedes votar";
} else {
    echo "Todavía no puedes votar";
}

El bloque else se ejecuta cuando la condición es falsa. No lleva condición propia: es «en cualquier otro caso».

if elseif else

Para evaluar varias condiciones en cadena:

<?php
$nota = 78;

if ($nota >= 90) {
    echo "Excelente";
} elseif ($nota >= 70) {
    echo "Bueno";
} elseif ($nota >= 51) {
    echo "Aprobado";
} else {
    echo "Reprobado";
}

Dos cosas importantes aquí:

Se evalúa de arriba hacia abajo y se detiene en la primera que se cumple. Por eso el orden importa: si pusieras $nota >= 51 al principio, un 95 entraría ahí y nunca llegaría a «Excelente».

Solo se ejecuta un bloque. En cuanto uno se cumple, el resto se ignora.

También puedes escribirlo como else if separado, pero elseif es la forma habitual en PHP.

Condiciones anidadas

Un if puede contener otro dentro:

<?php
$usuario = "victor";
$activo = true;

if ($usuario !== "") {
    if ($activo) {
        echo "Bienvenido, $usuario";
    } else {
        echo "Tu cuenta está desactivada";
    }
}

Funciona, pero conviene usarlo con moderación. Cuando el anidamiento pasa de dos o tres niveles, el código se vuelve difícil de seguir. Muchas veces se puede simplificar combinando condiciones:

<?php
if ($usuario !== "" && $activo) {
    echo "Bienvenido, $usuario";
}

Salida temprana: una técnica que ordena mucho

En lugar de anidar, comprueba primero lo que descarta y sal cuanto antes. El código queda plano y se lee mejor:

<?php
function procesarPedido($pedido)
{
    if (!isset($pedido)) {
        return "No hay pedido";
    }

    if ($pedido['total'] <= 0) {
        return "El total no es válido";
    }

    // Aquí llega solo lo válido
    return "Pedido procesado";
}

Compáralo mentalmente con la versión anidada: son tres niveles menos de indentación.

El operador ternario

Cuando la decisión es simple, hay una forma abreviada:

<?php
$edad = 20;

$mensaje = ($edad >= 18) ? "Mayor de edad" : "Menor de edad";
echo $mensaje;

Se lee así: condición ? valor si es verdadera : valor si es falsa.

Es muy cómodo para asignaciones cortas y dentro de HTML:

<?php
$clase = $activo ? "verde" : "rojo";

Eso sí, no lo anides. Un ternario dentro de otro es prácticamente ilegible; si necesitas eso, usa un if.

El operador de fusión de null

Cuando quieres un valor por defecto si algo no existe:

<?php
$nombre = $_GET['nombre'] ?? "Invitado";

Si $_GET['nombre'] no existe o es null, se usa "Invitado". Sin este operador tendrías que escribir:

<?php
$nombre = isset($_GET['nombre']) ? $_GET['nombre'] : "Invitado";

Lo vas a usar constantemente al trabajar con formularios. Existe además la versión que asigna:

<?php
$configuracion['idioma'] ??= 'es';

Sintaxis alternativa para mezclar con HTML

Cuando escribes condicionales dentro de una plantilla HTML, las llaves se pierden de vista. PHP ofrece una sintaxis pensada para eso:

<?php if ($usuario): ?>
    <p>Hola, <?php echo $usuario; ?></p>
<?php else: ?>
    <p>Por favor, inicia sesión</p>
<?php endif; ?>

En lugar de llaves se usan dos puntos y una palabra de cierre: endif. Es mucho más legible dentro de HTML, porque ves claramente dónde termina cada bloque.

Errores comunes

Confundir = con ==. El primero asigna, el segundo compara:

<?php
if ($edad = 18) {   // asigna 18 y siempre da verdadero
    // ...
}

Es un error clásico y PHP no siempre avisa. Recuerda usar ===.

Comparar decimales. Como vimos en la lección de operadores aritméticos, 0.1 + 0.2 === 0.3 es falso.

Olvidar que todo lo de un formulario es texto. Un if ($edad === 18) falla si $edad vale "18". Conviértelo antes con (int).

Un ejemplo práctico

Calculemos el descuento de una compra:

<?php
$total = 850;
$esSocio = true;

if ($total >= 1000) {
    $descuento = 0.20;
} elseif ($total >= 500 && $esSocio) {
    $descuento = 0.10;
} elseif ($total >= 500) {
    $descuento = 0.05;
} else {
    $descuento = 0;
}

$aPagar = $total - ($total * $descuento);

echo "Descuento aplicado: " . ($descuento * 100) . "%\n";
echo "Total a pagar: " . round($aPagar, 2);

Fíjate en el orden de las condiciones: la más específica va primero.

Para cerrar

Las condicionales son la herramienta con la que tu programa decide. Lo importante: ordena las condiciones de la más específica a la más general, prefiere la salida temprana al anidamiento profundo, y usa la sintaxis alternativa cuando escribas dentro de HTML.

En la siguiente lección veremos los bucles while y do while.

Saludos y éxitos.

Norvic Software

Desarrollamos el software que tu empresa necesita

Somos una fábrica de software en Bolivia. Construimos sistemas a medida y aplicaciones móviles, y llevamos Inteligencia Artificial a las empresas que ya tienen un sistema funcionando.

Solicitar cotizaciónVer todos los servicios

Cotización sin costo · Respuesta directa por WhatsApp