Las construcciones if ..., else y elseif permite condicionar la ejecución de uno o varios bloques de sentencias al cumplimiento de una o varias condiciones.
Documentación oficial PHP:
La sintaxis de la construcción if es la siguiente:
if (condición) {
bloque_de_sentencias
}
La ejecución de esta construcción es la siguiente:
El diagrama de flujo siguiente muestra la ejecución de una sentencia if ...:
Veamos un mismo programa de ejemplo ejecutado dos veces:
Ejemplo de if ... (1)
<?php
print "<h1>Tirada de dado</h1>\n";
$dado = rand(1, 6);
print "<p>Ha sacado un $dado.</p>\n";
if ($dado == 6) {
print "<p>¡Ha conseguido la máxima puntuación!</p>\n";
}
print "<p>¡Hasta la próxima!</p>\n";
?>
<h1>Tirada de dado</h1>
<p>Ha sacado un 6.</p>
<p>¡Ha conseguido la máxima puntuación!</p>
<p>¡Hasta la próxima!</p>
Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.
Ejemplo de if ... (1) - Paso 1
<?php
print "<h1>Tirada de dado</h1>\n";
$dado = rand(1, 6);
print "<p>Ha sacado un $dado.</p>\n";
if ($dado == 6) {
print "<p>¡Ha conseguido la máxima puntuación!</p>\n";
}
print "<p>¡Hasta la próxima!</p>\n";
?>
<h1>Tirada de dado</h1>
Se ejecuta la primera instrucción del programa.
En este caso, imprime el título de la página.
Ejemplo de if ... (1) - Paso 2
<?php
print "<h1>Tirada de dado</h1>\n";
$dado = rand(1, 6);
print "<p>Ha sacado un $dado.</p>\n";
if ($dado == 6) {
print "<p>¡Ha conseguido la máxima puntuación!</p>\n";
}
print "<p>¡Hasta la próxima!</p>\n";
?>
<h1>Tirada de dado</h1>
A continuación, calcula un número al azar del 1 al 6 con la función rand() y guarda el valor en la variable $dado. En este ejemplo, supondremos que se ha obtenido un 6.
Ejemplo de if ... (1) - Paso 3
<?php
print "<h1>Tirada de dado</h1>\n";
$dado = rand(1, 6);
print "<p>Ha sacado un $dado.</p>\n";
if ($dado == 6) {
print "<p>¡Ha conseguido la máxima puntuación!</p>\n";
}
print "<p>¡Hasta la próxima!</p>\n";
?>
<h1>Tirada de dado</h1>
<p>Ha sacado un 6.</p>
A continuación se muestra el valor obtenido (en este caso, 6).
Ejemplo de if ... (1) - Paso 4
<?php
print "<h1>Tirada de dado</h1>\n";
$dado = rand(1, 6);
print "<p>Ha sacado un $dado.</p>\n";
if ($dado == 6) {
print "<p>¡Ha conseguido la máxima puntuación!</p>\n";
}
print "<p>¡Hasta la próxima!</p>\n";
?>
<h1>Tirada de dado</h1>
<p>Ha sacado un 6.</p>
A continuación se evalúa la condición ($dado == 6).
En este caso, la condición es cierta (true).
Ejemplo de if ... (1) - Paso 5
<?php
print "<h1>Tirada de dado</h1>\n";
$dado = rand(1, 6);
print "<p>Ha sacado un $dado.</p>\n";
if ($dado == 6) {
print "<p>¡Ha conseguido la máxima puntuación!</p>\n";
}
print "<p>¡Hasta la próxima!</p>\n";
?>
<h1>Tirada de dado</h1>
<p>Ha sacado un 6.</p>
<p>¡Ha conseguido la máxima puntuación!</p>
Como la condición es cierta (true), a continuación se ejecutan las instrucciones del bloque if.
En este caso el bloque consta de una sola instrucción que imprime el texto indicando que se ha obtenido la máxima puntuación.
Ejemplo de if ... (1) - Paso 6
<?php
print "<h1>Tirada de dado</h1>\n";
$dado = rand(1, 6);
print "<p>Ha sacado un $dado.</p>\n";
if ($dado == 6) {
print "<p>¡Ha conseguido la máxima puntuación!</p>\n";
}
print "<p>¡Hasta la próxima!</p>\n";
?>
<h1>Tirada de dado</h1>
<p>Ha sacado un 6.</p>
<p>¡Ha conseguido la máxima puntuación!</p>
<p>¡Hasta la próxima!</p>
Una vez completado el bloque if ..., el programa salta a la instrucción siguiente al bloque if ...
La última instrucción del programa imprime una despedida y el programa termina.
Ejemplo de if ... (2)
<?php
print "<h1>Tirada de dado</h1>\n";
$dado = rand(1, 6);
print "<p>Ha sacado un $dado.</p>\n";
if ($dado == 6) {
print "<p>¡Ha conseguido la máxima puntuación!</p>\n";
}
print "<p>¡Hasta la próxima!</p>\n";
?>
<h1>Tirada de dado</h1>
<p>Ha sacado un 2.</p>
<p>¡Hasta la próxima!</p>
Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.
Ejemplo de if ... (2) - Paso 1
<?php
print "<h1>Tirada de dado</h1>\n";
$dado = rand(1, 6);
print "<p>Ha sacado un $dado.</p>\n";
if ($dado == 6) {
print "<p>¡Ha conseguido la máxima puntuación!</p>\n";
}
print "<p>¡Hasta la próxima!</p>\n";
?>
<h1>Tirada de dado</h1>
Se ejecuta la primera instrucción del programa.
En este caso, imprime el título de la página.
Ejemplo de if ... (2) - Paso 2
<?php
print "<h1>Tirada de dado</h1>\n";
$dado = rand(1, 6);
print "<p>Ha sacado un $dado.</p>\n";
if ($dado == 6) {
print "<p>¡Ha conseguido la máxima puntuación!</p>\n";
}
print "<p>¡Hasta la próxima!</p>\n";
?>
<h1>Tirada de dado</h1>
A continuación, calcula un número al azar del 1 al 6 con la función rand() y guarda el valor en la variable $dado. En este ejemplo, supondremos que se ha obtenido un 2.
Ejemplo de if ... (2) - Paso 3
<?php
print "<h1>Tirada de dado</h1>\n";
$dado = rand(1, 6);
print "<p>Ha sacado un $dado.</p>\n";
if ($dado == 6) {
print "<p>¡Ha conseguido la máxima puntuación!</p>\n";
}
print "<p>¡Hasta la próxima!</p>\n";
?>
<h1>Tirada de dado</h1>
<p>Ha sacado un 2.</p>
A continuación se muestra el valor obtenido (en este caso, 2).
Ejemplo de if ... (2) - Paso 4
<?php
print "<h1>Tirada de dado</h1>\n";
$dado = rand(1, 6);
print "<p>Ha sacado un $dado.</p>\n";
if ($dado == 6) {
print "<p>¡Ha conseguido la máxima puntuación!</p>\n";
}
print "<p>¡Hasta la próxima!</p>\n";
?>
<h1>Tirada de dado</h1>
<p>Ha sacado un 2.</p>
A continuación se evalúa la condición ($dado == 6).
En este caso, la condición es falsa (false).
Ejemplo de if ... (2) - Paso 6
<?php
print "<h1>Tirada de dado</h1>\n";
$dado = rand(1, 6);
print "<p>Ha sacado un $dado.</p>\n";
if ($dado == 6) {
print "<p>¡Ha conseguido la máxima puntuación!</p>\n";
}
print "<p>¡Hasta la próxima!</p>\n";
?>
<h1>Tirada de dado</h1>
<p>Ha sacado un 6.</p>
<p>¡Hasta la próxima!</p>
Como la condición es falsa, no se ejecutan las instrucciones del bloque y el programa salta a la instrucción siguiente al el bloque if ...
La última instrucción del programa imprime una despedida y el programa termina.
La construcción if se puede ampliar añadiendo la instrucción else:
if (condición) {
bloque_de_sentencias_1
} else {
bloque_de_sentencias_2
}
La ejecución de esta construcción es la siguiente:
En cualquier caso, solamente se ejecuta uno de los dos bloques de sentencias.
El diagrama de flujo siguiente muestra la ejecución de una sentencia if ... else ...:
La construcción if ... else ... se puede extender añadiendo la instrucción elseif:
if (condición_1) {
bloque_de_sentencias_1
} elseif (condición_2) {
bloque_de_sentencias_2
} else {
bloque_de_sentencias_3
}
La ejecución de esta construcción es la siguiente:
En cualquier caso, solamente se ejecuta uno de los tres bloques de sentencias.
Se pueden añadir tantas instrucciones elseif como se desee, teniendo en cuenta que en cualquier caso solamente se ejecuta uno de los bloques de sentencias.
if (condición_1) {
bloque_de_sentencias_1
} elseif (condición_2) {
bloque_de_sentencias_2
} elseif (condición_3) {
bloque_de_sentencias_3
} ... {
...
} elseif (condición_n) {
bloque_de_sentencias_n
} else {
bloque_de_sentencias_n+1
}
El diagrama de flujo siguiente muestra la ejecución de una sentencia if ... elseif ... else ...:
Documentación oficial PHP: Operador ternario ? :
La construcción if else (con una única instrucción en cada caso) ...
if (condición_1) {
instrucción_1;
} else {
instrucción_2;
}
... se puede escribir mediante el operador ternario ... ? ... : ...
condición_1 ? instrucción_1 : instrucción_2;
Por ejemplo, la construcción ...
if (condición_1) {
print "cadena_1";
} else {
print "cadena_2";
}
... se puede sustituir por la construcción:
condición_1 ? print "cadena_1" : print "cadena_2";
Teniendo en cuenta que una expresión (cadenas, cálculos, comparaciones, llamadas a funciones, etc.) también se puede considerar como instrucción, también podríamos escribir:
print condición_1 ? "cadena_1" : "cadena_2";
De la misma manera, la construcción:
if (condición_1) {
$variable = expresión_1;
} else {
$variable = expresión_2;
}
... se puede sustituir por la construcción:
$variable = condición_1 ? expresión_1 : expresión_2;
que si las expresiones son muy largas se puede escribir en varias líneas para facilitar la legibilidad:
$variable = condición_1
? expresión_1
: expresión_2;
La notación abreviada se puede anidar, aunque no se recomienda hacerlo porque la instrucción resultante no resulta demasiado legible. Por ejemplo, la estructura
if (condición_1) {
$variable = expresión_1;
} elseif (condición_2) {
$variable = expresión_2;
} else {
$variable = expresión_3;
}
... se puede sustituir por la construcción siguiente:
$variable = condición_1 ? expresión_1 : (condición_2 ? expresión_2 : expresión_3);
A partir de PHP 7.4, publicada en noviembre de 2019, es necesario escribir paréntesis en las expresiones anidadas para dejar claro el orden de ejecución de las asignaciones.