Estructuras de control: sentencia condicional if ... elseif ... else ...

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:

Sentencia condicional if ...

Sintaxis de la sentencia condicional if ...

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:

Diagrama de flujo de la sentencia condicional condicional if ...

El diagrama de flujo siguiente muestra la ejecución de una sentencia if ...:

DIAGRAMA DE FLUJO: SENTENCIA IF Haga clic en los botones de avance y retroceso para ver la ejecución paso a paso El programa llega al if. INICIO Evalúa la condición. CONDICIÓN Si la condición es true, ejecuta el bloque ... true BLOQUE ... y termina el if. FIN Si la condición es false, termina el if directamente. false FIN El programa llega al if. INICIO Evalúa la condición ... CONDICIÓN Si la condición es true, ejecuta el bloque ... true BLOQUE ... y termina el if. FIN Si la condición es false, termina el if directamente. false FIN

Programas de ejemplo con sentencias condicionales 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.

Siguiente

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.

Anterior Siguiente

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.

Anterior Siguiente

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).

Anterior Siguiente

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).

Anterior Siguiente

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.

Anterior Siguiente

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.

Anterior

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.

Siguiente

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.

Anterior Siguiente

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.

Anterior Siguiente

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).

Anterior Siguiente

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).

Anterior Siguiente

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.

Anterior

Sentencia condicional if ... else ...

Sintaxis de la sentencia condicional if ... else ...

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.

Diagrama de flujo de la sentencia condicional if ... else ...

El diagrama de flujo siguiente muestra la ejecución de una sentencia if ... else ...:

DIAGRAMA DE FLUJO: SENTENCIA IF ... ELSE ... Haga clic en los botones de avance y retroceso para ver la ejecución paso a paso El programa llega al if else. INICIO Evalúa la condición. CONDICIÓN Si la condición es true, ejecuta el bloque correspondiente ... true BLOQUE 1 ... y termina el if else. FIN Si la condición es false, ejecuta el bloque correspondiente ... false BLOQUE 2 ... y termina el if else. FIN El programa llega al if else. INICIO Evalúa la condición. CONDICIÓN Si la condición es true, ejecuta el bloque correspondiente ... true BLOQUE 1 ... y termina el if else. FIN Si la condición es false, ejecuta el bloque correspondiente ... false BLOQUE 2 ... y termina el if else. FIN

Sentencia condicional if ... elseif ... else ...

Sintaxis de la sentencia condicional if ... elseif ... 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
}

Diagrama de flujo de la sentencia condicional if ... elseif ... else ...

El diagrama de flujo siguiente muestra la ejecución de una sentencia if ... elseif ... else ...:

DIAGRAMA DE FLUJO: SENTENCIA IF ELSEIF ELSE Haga clic en los botones de avance y retroceso para ver la ejecución paso a paso El programa llega al if elseif else. INICIO Evalúa la condición del if. CONDICIÓN 1 Si la condición del if es true, ejecuta el bloque correspondiente ... true BLOQUE 1 ... y termina el if elseif else. FIN Si la condición del if es false, evalúa la condición del elseif. false CONDICIÓN 2 Si la condición del elseif es true, ejecuta el bloque correspondiente ... true BLOQUE 2 ... y termina el if elseif else. FIN Si la condición del elseif es false, ejecuta el bloque correspondiente ... false BLOQUE 3 ... y termina el if elseif else. FIN El programa llega al if elseif else. INICIO Evalúa la condición del if. CONDICIÓN 1 Si la condición del if es true, ejecuta el bloque correspondiente ... true BLOQUE 1 ... y termina el if elseif else. FIN Si la condición del if es false, evalúa la condición del elseif. false CONDICIÓN 2 Si la condición del elseif es true, ejecuta el bloque correspondiente ... true BLOQUE 2 ... y termina el if elseif else. FIN Si la condición del elseif es false, ejecuta el bloque correspondiente ... false BLOQUE 3 ... y termina el if elseif else. FIN

Operador ternario ... ? ... : ...

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.