if/else y match
Ramificación condicional en PHP, desde el if/else básico hasta la moderna expresión match.
2 min de lectura
La lógica condicional de PHP resultará familiar si has usado algún lenguaje de estilo C, más una incorporación moderna — match — que vale la pena preferir sobre un switch largo.
if, elseif, else
<?php
$age = 20;
if ($age < 13) {
echo "Child";
} elseif ($age < 20) {
echo "Teenager";
} else {
echo "Adult";
}Las condiciones se evalúan de arriba a abajo, y se ejecuta la primera rama cuya condición sea true — el resto se omite por completo, incluso si una condición posterior también hubiera sido verdadera.
Operadores de comparación y lógicos
<?php
$isMember = true;
$hasCoupon = false;
if ($isMember && $hasCoupon) {
echo "20% off";
} elseif ($isMember || $hasCoupon) {
echo "10% off";
}&& (y), || (o) y ! (no) combinan condiciones. PHP también tiene and/or como alternativas basadas en palabras con menor precedencia que &&/|| — una trampa común, ya que $a = false or true; asigna false a $a (porque = se une con más fuerza que or), no el true que un principiante podría esperar. Usa && y || para evitar esa ambigüedad por completo.
Los operadores ternario y de fusión con null
<?php
$status = $isActive ? "Active" : "Inactive";
$name = $user['name'] ?? "Guest";El operador ternario (condición ? siVerdadero : siFalso) es un if/else compacto para un único valor. ?? (fusión con null) devuelve su lado izquierdo salvo que sea null o no esté definido, en cuyo caso recurre al lado derecho — se usa comúnmente para valores por defecto sin disparar un aviso de "índice indefinido".
switch: comparar un valor con muchos
<?php
$day = "Mon";
switch ($day) {
case "Sat":
case "Sun":
echo "Weekend";
break;
default:
echo "Weekday";
}switch compara $day con cada case usando igualdad flexible (==), y — de forma crítica — la ejecución cae al siguiente caso (fall-through) a menos que uses break. Apilar case "Sat": case "Sun": sin código entre ellos es la forma de compartir intencionalmente un bloque entre varios valores; olvidar break en cualquier otro lugar es un error clásico.
match: el reemplazo moderno y más seguro de switch
<?php
$day = "Mon";
$type = match ($day) {
"Sat", "Sun" => "Weekend",
default => "Weekday",
};
echo $type;match (añadido en PHP 8) corrige los aspectos más problemáticos de switch: compara con igualdad estricta (===, sin malabarismo de tipos), nunca tiene fall-through entre ramas, y es una expresión — produce directamente un valor que puedes asignar, en lugar de requerir que se establezca una variable dentro de cada rama. También lanza un error si ninguna rama coincide y no hay default, en lugar de no hacer nada silenciosamente. Para código nuevo, prefiere match sobre switch siempre que estés mapeando un valor a otro.
Pon a prueba lo que acabas de aprender
4 preguntas rápidas. Respóndelas todas correctamente para desbloquear la siguiente lección.
Puedes hacer el cuestionario sin una cuenta — iniciar sesión solo hace que tu resultado cuente para tu progreso.