Condicionales en PHP

Los condicionales permiten que el programa tome decisiones: ejecutar un bloque de código solo si se cumple cierta condición. Son la base de cualquier lógica de programación.

if — la decisión básica

La estructura if evalúa una condición. Si es verdadera, ejecuta el bloque de código entre llaves. Si es falsa, lo saltea directamente.

$edad = 20;

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

// Si la condición es falsa, no pasa nada
$temperatura = 10;
if ($temperatura > 30) {
    echo "Hace mucho calor";  // esto no se ejecuta
}

echo "Esta línea siempre se ejecuta";
Las llaves son obligatorias (casi)

Técnicamente PHP permite omitir las llaves si el bloque tiene una sola línea, pero es una práctica que genera errores difíciles de encontrar. Siempre usá llaves — el código es más claro y más seguro.

Probá el Ejemplo 1: if básico

if / else

Con else definís qué pasa cuando la condición es falsa. Siempre se ejecuta uno de los dos bloques, nunca los dos.

$hora = 14;

if ($hora < 12) {
    echo "Buenos días";
} else {
    echo "Buenas tardes";
}

// Otro ejemplo: verificar si un número es par o impar
$numero = 7;

if ($numero % 2 === 0) {
    echo "$numero es par";
} else {
    echo "$numero es impar";
}

if / elseif / else

Cuando hay más de dos posibilidades usás elseif. PHP evalúa cada condición de arriba hacia abajo y ejecuta el primer bloque cuya condición sea verdadera. Los demás se saltan aunque también sean verdaderos.

$nota = 75;

if ($nota >= 90) {
    echo "Sobresaliente";
} elseif ($nota >= 80) {
    echo "Notable";
} elseif ($nota >= 70) {
    echo "Bien";
} elseif ($nota >= 60) {
    echo "Aprobado";
} else {
    echo "Desaprobado";
}
El orden importa

Si pusieras $nota >= 60 primero, una nota de 95 caería ahí y nunca llegaría a "Sobresaliente". Siempre ponés los casos más específicos (o más restrictivos) primero.

Probá el Ejemplo 2: elseif

Operadores de comparación

Son los operadores que usás dentro de las condiciones:

OperadorSignificadoEjemploResultado
==Igual (valor)5 == "5"true
===Idéntico (valor y tipo)5 === "5"false
!=Distinto (valor)5 != 3true
!==No idéntico5 !== "5"true
>Mayor que7 > 5true
<Menor que3 < 5true
>=Mayor o igual5 >= 5true
<=Menor o igual3 <= 5true
== vs === en PHP

== compara solo el valor y hace conversión de tipos: 0 == false es true, "1" == 1 es true. Esto puede dar resultados inesperados. === compara valor Y tipo, sin conversiones. En general, preferí siempre === para evitar sorpresas.

Operadores lógicos

Permiten combinar varias condiciones en una sola:

$edad      = 25;
$tiene_dni = true;

// AND (&&) — ambas condiciones deben ser true
if ($edad >= 18 && $tiene_dni) {
    echo "Puede votar";
}

// OR (||) — al menos una condición debe ser true
$dia = "sábado";
if ($dia === "sábado" || $dia === "domingo") {
    echo "Es fin de semana";
}

// NOT (!) — invierte la condición
$logueado = false;
if (!$logueado) {
    echo "Por favor iniciá sesión";
}
&& vs and, || vs or

PHP acepta tanto && como and, y tanto || como or. Pero tienen distinta precedencia — && y || tienen mayor prioridad. Para evitar confusión, usá siempre && y ||.

Probá el Ejemplo 3: Operadores lógicos

switch — múltiples casos exactos

switch es útil cuando tenés una variable y querés comparar su valor contra muchas opciones exactas. Es más legible que una cadena larga de elseif cuando todos los casos comparan la misma variable.

$dia = "lunes";

switch ($dia) {
    case "lunes":
    case "martes":
    case "miércoles":
    case "jueves":
    case "viernes":
        echo "Día de semana";
        break;
    case "sábado":
    case "domingo":
        echo "Fin de semana";
        break;
    default:
        echo "Día inválido";
}
No olvides el break

Sin break, PHP continúa ejecutando el siguiente case aunque no coincida — ese comportamiento se llama "fall-through". A veces se usa intencionalmente (como en el ejemplo de días de semana), pero si lo olvidás sin querer genera bugs difíciles de encontrar.

match — la alternativa moderna (PHP 8+)

match es como un switch pero más seguro: usa comparación estricta (===), no tiene fall-through y siempre devuelve un valor:

$estado = "pendiente";

$mensaje = match($estado) {
    "pendiente"  => "Tu orden está siendo procesada",
    "enviado"    => "Tu orden está en camino",
    "entregado"  => "Tu orden fue entregada",
    "cancelado"  => "Tu orden fue cancelada",
    default      => "Estado desconocido",
};

echo $mensaje;
Probá el Ejemplo 4: switch y match

Operador ternario

Una forma compacta de escribir un if/else simple en una sola línea. Ideal para asignar un valor según una condición:

// Forma completa: if/else
if ($edad >= 18) {
    $estado = "mayor";
} else {
    $estado = "menor";
}

// Ternario: condición ? valor_si_true : valor_si_false
$estado = $edad >= 18 ? "mayor" : "menor";

// Otro ejemplo
$precio    = 100;
$descuento = $edad < 25 ? 0.20 : 0.10;
echo "Descuento: " . ($descuento * 100) . "%";
Operador null coalescing ??

?? es un caso especial muy útil en PHP: devuelve el valor de la izquierda si existe y no es null, o el de la derecha si no. $nombre = $_GET["nombre"] ?? "invitado" — si no viene el parámetro, usa "invitado".

Buenas Prácticas

  • Usá === en vez de == — evita conversiones de tipo implícitas que pueden dar resultados inesperados
  • No anides demasiados if — más de 3 niveles de anidamiento hace el código muy difícil de leer; considerá refactorizar con funciones
  • Retorno temprano — en funciones, si una condición hace que no tenga sentido continuar, devolvé o salí antes: menos anidamiento, más claro
  • match en vez de switch — en PHP 8+ preferí match: es más seguro y más conciso
  • ?? para valores por defecto — es la forma idiomática de manejar variables que pueden no existir