if (condition) { ... } ejecuta su bloque solo cuando la condición es verdadera. Añade elseif (other condition) { ... } para más casos y else { ... } para todo lo que quede. PHP comprueba las condiciones desde arriba y ejecuta solo el primer bloque que coincide.
Cambia $temperature y vuelve a ejecutarlo. Como las comprobaciones van de arriba abajo, 24 se detiene en la segunda condición y nunca llega a >= 10, aunque también sea verdadera. Ordena las condiciones de la más específica a la más general.
elseif vs else if
Con llaves, elseif y else if hacen lo mismo. Técnicamente, else if es un else cuyo cuerpo es un nuevo if, pero el resultado es idéntico.
La diferencia solo aparece con la sintaxis de dos puntos que se usa en las plantillas (siguientes secciones). Ahí, else if rompe el código:
<?php $score = 72; ?>
<?php if ($score >= 90): ?>
<p>A</p>
<?php else if ($score >= 60): ?>
<p>Passed</p>
<?php endif; ?>
PHP Parse error: syntax error, unexpected token "if", expecting ":" in /home/index.php on line 4
Escribe elseif como una sola palabra y nunca verás ese error.
Varias condiciones con && y ||
&& (y) necesita que los dos lados sean verdaderos, || (o) necesita al menos uno, y ! invierte una condición. PHP deja de evaluar en cuanto conoce la respuesta, así que en $user !== null && $user['active'] la segunda parte solo se ejecuta cuando hay un usuario.
Cuando mezcles && y ||, añade paréntesis: && tiene más prioridad, y los paréntesis dejan clara la intención a quien lea después. PHP también tiene las palabras clave and y or, pero tienen menos prioridad que =, así que $ok = true and false; pone $ok a true. Quédate con && y ||.
Qué cuenta como verdadero en un if
La condición no tiene que ser un booleano. PHP la convierte, y unos pocos valores cuentan como falsos: false, 0, 0.0, "", "0", [] y null. Todo lo demás es verdadero, incluidos "false", " " y "0.0".
| $x | bool | empty |
|---|---|---|
| false | ||
| 0 | ||
| 0.0 | ||
| "" | ||
| "0" | ||
| null | ||
| [] | ||
| " " | ||
| "0.0" | ||
| "a" | ||
| [0] | ||
| 1 |
Por eso if ($items) es una forma habitual de decir "el array no está vacío". La fila de "0" es la que muerde: un campo de formulario en el que alguien escribió 0 es una cadena no vacía, y aun así if ($_POST['qty']) lo trata como falso. Compara de forma explícita (if ($qty !== '')) cuando el cero sea una respuesta válida. Las mismas reglas deciden qué devuelve empty().
if else en HTML con if: y endif;
Entre etiquetas HTML, las llaves se pierden con facilidad. PHP tiene una sintaxis alternativa: dos puntos después de la condición, elseif ...: y else: para las otras ramas, y endif; al final. Ejecuta este bloque y luego haz clic en las puntuaciones de la pestaña Página: cada enlace vuelve a ejecutar el mismo script con un nuevo $_GET['score'].
<?= $score ?> es la forma corta de <?php echo $score; ?>. El mismo estilo con dos puntos existe para los bucles (foreach: endforeach;, while: endwhile;) y es el que usan la mayoría de las plantillas PHP.
if en una línea y el operador ternario
Una única sentencia puede ir detrás de la condición sin llaves. Funciona, pero la siguiente línea que añadas no quedará dentro del if, así que muchas guías de estilo exigen llaves siempre. Para elegir uno de dos valores, el operador ternario es más corto que un if/else completo.
Cuando hay muchos valores exactos que comparar con una variable, una expresión match se lee mejor que una larga cadena de elseif.
Salir antes en lugar de anidar
Los bloques if muy anidados son difíciles de seguir. Dentro de una función, comprueba primero los casos de error y haz return enseguida. Así la lógica principal queda en el margen izquierdo.
Error frecuente: = en lugar de == en una condición
Un solo = asigna. if ($role = 'admin') guarda 'admin' en $role y luego evalúa esa cadena, que es verdadera. El bloque se ejecuta para todos los usuarios, y además $role queda con un valor incorrecto.
Usa === para comparar salvo que tengas un motivo para querer conversión de tipos. Hay quien escribe la constante primero (if ('admin' === $role)), para que un = olvidado se convierta en un error en lugar de una asignación silenciosa.
Preguntas frecuentes
¿Cuál es la diferencia entre elseif y else if en PHP?
Con llaves se comportan igual: else if es un else cuyo cuerpo es otro if. Con la sintaxis de dos puntos (if (...): ... endif;) solo funciona elseif, y else if es un error de sintaxis. Usar elseif siempre evita la diferencia.
¿Cómo compruebo varias condiciones en un if de PHP?
Únelas con && (todas deben ser verdaderas) o || (al menos una): if ($age >= 18 && $hasTicket) { ... }. Usa paréntesis cuando mezcles las dos, por ejemplo if ($isAdmin || ($isOwner && $isActive)).
¿Cómo escribo un if en una sola línea en PHP?
Una única sentencia puede ir detrás de la condición sin llaves: if ($debug) echo 'debug mode';. Para elegir entre dos valores en una línea, usa el operador ternario: $label = $count === 1 ? 'item' : 'items';.
¿Cómo uso if else dentro de HTML en PHP?
Usa la sintaxis alternativa, que se lee bien entre etiquetas HTML: <?php if ($loggedIn): ?> <p>Welcome back</p> <?php else: ?> <a href="/login">Log in</a> <?php endif; ?>.