Estructuras de control

if ... elseif ... else

Las construcciones if, else y elseif permite condicionar la ejecución de un bloque de sentencias al cumplimiento de una condición.

La sintaxis de la construcción if más sencilla es la siguiente:

if (expresión) {
    bloque_de_sentencias
}

La expresión se evalúa siempre, si el resultado es true se ejecuta el bloque de sentencias y si el resultado es false no se ejecuta el bloque de sentencias.


La construcción if se puede complicar añadiendo la instrucción else:

if (expresión) {
    bloque_de_sentencias_1
} else {
    bloque_de_sentencias_2
}

La expresión se evalúa siempre, si el resultado es true se ejecuta solamente el bloque de sentencias 1 y si el resultado es false se ejecuta solamente el bloque de sentencias 2.


La construcción if ... else se puede extender añadiendo la instrucción elseif:

if (expresión_1) {
    bloque_de_sentencias_1
} elseif (expresión_2) {
    bloque_de_sentencias_2
} else {
    bloque_de_sentencias_3
}

La expresión 1 se evalúa siempre, si el resultado es true se ejecuta solamente el bloque de sentencias 1 y solamente si el resultado es false se evalúa la expresión 2, si el resultado de esta es true se ejecuta solamente el bloque de sentencias 2 y si el resultado es false se ejecuta solamente el bloque de sentencias 3. 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 (expresión_1) {
    bloque_de_sentencias_1
} elseif (expresión_2) {
    bloque_de_sentencias_2
} elseif (expresión_3) {
    bloque_de_sentencias_3
 ...
} elseif (expresión_n) {
    bloque_de_sentencias_n
} else {
    bloque_de_sentencias_n+1
}

Notación abreviada .. ? ... : ...

La construcción

if (expresión_1) {
    $variable = expresion1;
} else
    $variable = expresion2;
}

se puede sustituir por la construcción:

$variable = (expresión_1)? expresion1 : expresion2;

que se suele escribir en varias líneas para facilitar la legibilidad:

$variable = (expresión_1)
    ? expresion1
    : expresion2;

switch

La sentencia switch es equivalente a una construcción if ... elseif ... en las que las expresiones son comparaciones de igualdad de la misma expresión con valores distintos.

La sintaxis de la sentencia switch es la siguiente:

switch (expresión_1) {
    case valor_1:
        bloque_de_sentencias_1;
        break;
    case valor_2:
        bloque_de_sentencias_2;
        break;
    ...
    case valor_n:
        bloque_de_sentencias_n;
        break;
}

que es equivalente a :

if (expresión_1 == valor_1) {
    bloque_de_sentencias_1
} elseif (expresión_1 == valor_2) {
    bloque_de_sentencias_2
} elseif (expresión_1 == valor_3) {
    bloque_de_sentencias_3
 ...
} elseif (expresión_1 == valor_n) {
    bloque_de_sentencias_n
}

for

Nota: En la lección Bucle for se explica con más detalle esta estructura de control.

La sintaxis del bucle for es la siguiente:

for (expresión_inicial; condición_continuación; expresión_paso) {
    bloque_de_sentencias
}

La expresión inicial se evalúa siempre. La condición de continuación se evalúa al principio de cada iteración: si el resultado es true se ejecuta primero el bloque de sentencias, después la expresión de paso y finalmente se evalúa nuevamente la condición de continuación; si el resultado es false el bucle se termina.

Cuando se programa un bucle for hay que tener cuidado en que la condición de continuación vaya a dejar de cumplirse en algún momento, porque si no es así, el bucle no terminaría nunca.


En los bucles for más sencillos, en la expresión inicial se inicializa una variable que se evalúa en la expresión final y que se modifica en la expresión de paso, como muestra el ejemplo siguiente:

<?php
for ($i = 0; $i < 5; $i++) {
    print "<p>$i</p>\n";
}
?>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>

while

La sintaxis del bucle while es la siguiente:

while (expresión) {
    bloque_de_sentencias
}

La expresión se evalúa al principio de cada iteración: si el resultado es true se ejecuta el bloque de sentencias; si el resultado es false el bucle se termina.

Cuando se programa un bucle while hay que tener cuidado en que la expresión deje de cumplirse en algún momento, porque si no es así, el bucle no terminaría nunca.


En los bucles while más sencillos, antes del bucle se inicializa una variable que se evalúa en la expresión y dentro del bucle se modifica la variable, como muestra el ejemplo siguiente:

<?php
$i = 0;
while ($i < 5) {
    print "<p>$i</p>\n";
    $i++;
}
?>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>

do ... while

La sintaxis del bucle do ... while es la siguiente:

do {
    bloque_de_sentencias
} while (expresión) 

La expresión se evalúa al final de cada iteración: si el resultado es true se ejecuta el bloque de sentencias; si el resultado es false el bucle se termina.

El bucle do ... while es muy similar al bucle while, la principal diferencia es que en el bucle do ... while el bloque de sentencias se ejecuta por lo menos una vez mientras que en el bucle while depende de si la expresión es cierta o no la primera vez que se evalúa.

Cuando se programa un bucle do ... while hay que tener cuidado en que la expresión deje de cumplirse en algún momento, porque si no es así, el bucle no terminaría nunca.


En los bucles do ... while más sencillos, antes del bucle se inicializa una variable que se evalúa en la expresión y dentro del bucle se modifica la variable, como muestra el ejemplo siguiente:

<?php
$i = 0;
do {
    print "<p>$i</p>\n";
    $i++;
} while ($i < 5)
?>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>

foreach

Nota: En la lección Bucle foreach se explica con más detalle esta estructura de control.

El bucle foreach es muy útil para recorrer matrices cuyo tamaño se desconoce o matrices cuyos índices no son correlativos o numéricos (matrices asociativas).


La sintaxis del bucle foreach más simple es la siguiente:

foreach ($matriz as $valor) {
    bloque_de_sentencias
}

El bucle ejecuta el bloque de sentencias tantas veces como elementos contenga la matriz $matriz y, en cada iteración, la variable $valor toma uno de los valores de la matriz.

En el ejemplo siguiente se define una matriz y se imprimen sus valores:

<?php
$matriz = array(0, 1, 10, 100, 1000);
foreach ($matriz as $valor) {
    print "<p>$valor</p>\n";
}
?>
<p>0</p>
<p>1</p>
<p>10</p>
<p>100</p>
<p>1000</p>

La sintaxis del bucle foreach puede también ser la siguiente:

foreach ($matriz as $indice => $valor) {
    bloque_de_sentencias
}

El bucle ejecuta el bloque de sentencias tantas veces como elementos contenga la matriz $matriz y, en cada iteración, la variable $valor toma uno de los valores de la matriz y la variable $indice toma como valor el índice correspondiente. Esta construcción es muy útil

En el ejemplo siguiente se define una matriz asociativa y se imprimen sus valores:

<?php
$matriz = array ("red" => "rojo", "green" => "verde", "blue" => "azul");
foreach ($matriz as $indice => $valor) {
    print "<p>$indice : $valor</p>\n";
}
?>
<p>red : rojo</p>
<p>green : verde</p>
<p>blue : azul</p>