Condicionales en PHP: if, elseif, else, switch, match y operador ternario


Los programas no siempre ejecutan exactamente las mismas instrucciones. Muchas veces necesitan tomar decisiones según los datos disponibles: permitir o negar acceso, aplicar un descuento, mostrar un mensaje distinto o ejecutar una acción determinada.

En PHP estas decisiones se construyen mediante condicionales. En esta guía vamos a aprender cómo funcionan if, elseif, else, switch, match y el operador ternario.

¿Qué es una condición?

Una condición es una expresión que PHP puede evaluar como verdadera o falsa.

Por ejemplo:

$edad = 20;

$edad >= 18

La expresión $edad >= 18 produce un valor booleano:

true

Ese resultado puede utilizarse para decidir qué bloque de código ejecutar.

Recordatorio: operadores de comparación

Las condiciones suelen construirse con operadores como:

  • ==: igualdad flexible;
  • ===: igualdad estricta;
  • !=: distinto;
  • !==: distinto en valor o tipo;
  • >: mayor;
  • <: menor;
  • >=: mayor o igual;
  • <=: menor o igual.

La estructura if

if ejecuta un bloque de código solamente cuando una condición es verdadera.

<?php

$edad = 20;

if ($edad >= 18) {
    echo 'Es mayor de edad';
}

PHP evalúa primero:

$edad >= 18

Como el resultado es true, ejecuta el contenido entre llaves.

¿Qué representan las llaves?

Las llaves { } delimitan el bloque de instrucciones que pertenece al condicional.

if ($condicion) {
    echo 'Primera instrucción';
    echo 'Segunda instrucción';
}

Si la condición es falsa, ninguna de esas instrucciones se ejecuta.

if y else

else permite definir qué debe ocurrir cuando la condición del if es falsa.

$edad = 16;

if ($edad >= 18) {
    echo 'Es mayor de edad';
} else {
    echo 'Es menor de edad';
}

Solo uno de los dos bloques será ejecutado.

if, elseif y else

Cuando existen más de dos posibilidades podemos utilizar elseif.

$nota = 8;

if ($nota >= 9) {
    echo 'Excelente';
} elseif ($nota >= 6) {
    echo 'Aprobado';
} else {
    echo 'Desaprobado';
}

PHP evalúa las condiciones de arriba hacia abajo y ejecuta el primer bloque cuya condición sea verdadera.

El orden de las condiciones importa

Este ejemplo está mal planteado:

if ($nota >= 6) {
    echo 'Aprobado';
} elseif ($nota >= 9) {
    echo 'Excelente';
}

Si la nota es 10, la primera condición ya es verdadera y PHP nunca llega al segundo bloque.

Por eso conviene ordenar primero las condiciones más específicas.

Condiciones compuestas

Podemos combinar varias condiciones mediante operadores lógicos.

AND con &&

$edad = 20;
$tieneDocumento = true;

if ($edad >= 18 && $tieneDocumento === true) {
    echo 'Puede ingresar';
}

Ambas condiciones deben ser verdaderas.

OR con ||

$esAdmin = false;
$esSupervisor = true;

if ($esAdmin || $esSupervisor) {
    echo 'Tiene permisos';
}

Alcanza con que una de las dos condiciones sea verdadera.

NOT con !

$bloqueado = false;

if (!$bloqueado) {
    echo 'Usuario habilitado';
}

El operador ! invierte un valor booleano.

Usar paréntesis para expresar la lógica

Cuando combinamos varias condiciones, los paréntesis ayudan a dejar claro el orden de evaluación.

if (($edad >= 18 && $tieneDocumento) || $esAdmin) {
    echo 'Acceso permitido';
}

La intención resulta mucho más clara que en una expresión larga sin agrupación visual.

Comparación estricta dentro de condicionales

Cuando queremos comparar no solo el valor sino también el tipo, utilizamos ===.

$estado = '1';

if ($estado === 1) {
    echo 'Activo';
}

Este bloque no se ejecuta porque '1' es un string y 1 es un entero.

Valores truthy y falsy

PHP puede interpretar ciertos valores como verdaderos o falsos incluso si no son booleanos explícitos.

Por ejemplo, estos valores suelen evaluarse como falsos:

  • false;
  • 0;
  • 0.0;
  • '';
  • '0';
  • null;
  • un array vacío.

Ejemplo:

$nombre = '';

if ($nombre) {
    echo 'Hay un nombre';
} else {
    echo 'El nombre está vacío';
}

Esto puede ser útil, pero también puede generar confusión. Cuando el tipo importa, conviene escribir condiciones explícitas.

switch

switch resulta útil cuando queremos comparar una misma variable contra varios valores posibles.

$estado = 'pendiente';

switch ($estado) {
    case 'pendiente':
        echo 'Pedido pendiente';
        break;

    case 'pagado':
        echo 'Pedido pagado';
        break;

    case 'cancelado':
        echo 'Pedido cancelado';
        break;

    default:
        echo 'Estado desconocido';
}

¿Para qué sirve break?

break detiene la ejecución del switch una vez encontrada una coincidencia.

Si lo omitimos, PHP puede continuar ejecutando los siguientes casos. Este comportamiento se denomina fall-through.

default

default funciona como un caso alternativo cuando ningún case coincide.

Es comparable al else de una estructura if.

¿Cuándo conviene switch?

Puede ser más legible que muchos elseif cuando comparamos una misma variable contra valores concretos.

Por ejemplo, estados como:

pendiente
pagado
cancelado
enviado

son un buen caso de uso.

match en PHP moderno

Desde PHP 8 existe match, una expresión más moderna para resolver ciertos casos similares a switch.

$estado = 'pagado';

$mensaje = match ($estado) {
    'pendiente' => 'Pedido pendiente',
    'pagado' => 'Pedido pagado',
    'cancelado' => 'Pedido cancelado',
    default => 'Estado desconocido',
};

echo $mensaje;

match devuelve un valor, por eso podemos asignar directamente su resultado a una variable.

Diferencias importantes entre switch y match

match tiene algunas ventajas:

  • utiliza comparación estricta;
  • no necesita break;
  • devuelve un valor;
  • suele ser más compacto.

Para código PHP moderno suele ser una alternativa muy clara cuando necesitamos mapear un valor a otro.

Operador ternario

El operador ternario permite expresar una decisión simple en una sola expresión.

$edad = 20;

$mensaje = $edad >= 18 ? 'Mayor de edad' : 'Menor de edad';

echo $mensaje;

Su estructura es:

condición ? valor_si_true : valor_si_false

¿Cuándo usar el ternario?

Conviene utilizarlo para decisiones breves y fáciles de leer.

Si la condición se vuelve compleja, un if suele ser más claro.

Ternario corto

PHP también permite:

$nombreMostrado = $nombre ?: 'Sin nombre';

Si $nombre es evaluado como verdadero, se utiliza su valor. De lo contrario, se utiliza 'Sin nombre'.

Ternario corto vs operador ??

No hacen exactamente lo mismo.

$valor = $nombre ?: 'Sin nombre';
$valor = $nombre ?? 'Sin nombre';

?: utiliza el valor alternativo cuando el primero es falsy.

?? utiliza el alternativo solamente cuando la variable no existe o es null.

Ejemplo: sistema de descuentos

$total = 150000;
$esClientePremium = true;

if ($esClientePremium && $total >= 100000) {
    $descuento = 20;
} elseif ($total >= 100000) {
    $descuento = 10;
} else {
    $descuento = 0;
}

echo "Descuento: $descuento%";

Acá combinamos una condición numérica con una condición booleana.

Ejemplo: permisos de usuario

$rol = 'admin';
$activo = true;

if ($activo && $rol === 'admin') {
    echo 'Acceso completo';
} elseif ($activo && $rol === 'editor') {
    echo 'Acceso de edición';
} else {
    echo 'Acceso limitado';
}

Errores comunes

  • confundir = con == o ===;
  • ordenar mal los elseif;
  • olvidar break dentro de un switch;
  • escribir condiciones demasiado largas;
  • abusar del operador ternario;
  • no tener en cuenta los valores truthy y falsy;
  • usar comparaciones flexibles cuando el tipo importa.

Ejercicios

  1. determinar si una persona es mayor de edad;
  2. indicar si un número es positivo, negativo o cero;
  3. clasificar una nota como desaprobada, aprobada o excelente;
  4. determinar si un número es par utilizando %;
  5. crear un sistema de descuento según importe;
  6. mostrar un mensaje diferente según el rol del usuario;
  7. resolver un estado de pedido con switch;
  8. reescribir ese mismo ejemplo utilizando match;
  9. mostrar “Activo” o “Inactivo” mediante un ternario;
  10. comparar el comportamiento de ?: y ??.

Qué aprendimos

  • qué es una condición;
  • cómo funciona if;
  • else y elseif;
  • condiciones compuestas;
  • operadores lógicos;
  • truthy y falsy;
  • switch y break;
  • match;
  • operador ternario;
  • diferencias entre ?: y ??.

¿Qué sigue?

En la próxima guía veremos bucles en PHP: for, while, do while y foreach, para repetir instrucciones de forma controlada.

¿Te sirvió esta guía? ☕

Si este contenido te ayudó y querés apoyar a Club Programador, podés colaborar mediante:

☕ Apoyar con Mercado Pago

🌎 Apoyar con PayPal


Descubre más desde Club Programador

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Deja un comentario

Descubre más desde Club Programador

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo