Estructuras de control
Control de flujo de programa
Todo lenguaje de programación dispone de órdenes de control de flujo, que permite al programa tomar decisiones lógicas segun reciba unos parámetros o otros: si llueve coge el paraguas; pero si hace sol vete a la playa.
Las posibilidades que ofrece php son:
- if/else
- if/elseif/else
- switch
- do/while
- while
- for
if else
Es la estructura de control mas corriente: La declaración if obliga a evaluar la expresión entre paréntesis; si se evalua como verdadera, se ejecuta un bloque de código; si se evalua como falsa, el bloque de código es ignorado. De esta forma nuestro script puede tomar decisiones:
<?php
$edad = "";
if ($edad >= 18)
{
echo "puedes sacar el coche";
}
else
{
echo "ve en autobús";
}
?>
Opcionalmente podemos usar una declaración else, que indicará el código que debe ejecutarse si la condición no es cumplida. La declaración else no es obligatoria, y no puede estar a su vez condicionada: else (otra condición) {…} sería inválido.
<?php
if ($user == "pepe")
{
// código especial para el usuario pepe
}
// código para todos los usuarios, sean o no pepe
?>
El código condicionado a la cláusula if solo se evalua si la condición (que siempre debe estar entre paréntesis) se evalua como verdadera. Si no se cumple, la ejecución pasa al siguiente bloque de código.
Solo es estrictamente necesario el uso de llaves {} encerrando el código sujeto a la condición cuando ocupa mas de una línea.
Condiciones complejas
Mediante el uso de operadores podemos introducir condiciones complejas, agrupándolas con parentesis:
<?php
if (($edad >= 18)&& ($carnet_conducir == 1))
{
}
?>
if elseif else
Exactamente igual que la anterior, solo que evaluando mas de una condición:
<?php
if ($user == "pepe")
{
// codigo para pepe
}
elseif ($user == "juan")
{
// codigo para juan
}
else
{
// codigo para quienes no son juan ni pepe
}
?>
A efectos prácticos podemos considerar que elseif y else if son lo mismo.
Operador ternario
Podemos incluir clausulas condicionales simples con una sintaxis abreviada:
(condición) ? (código a ejecutar si se da la condición) : (se ejecuta si no se da)
El primer parentesis contiene la condición; el segundo el código a ejecutar si verdadera; el tercero el código a ejecutar si falsa.
<?php
$num = 1;
($num == 1) ? (echo "$num es igual a 1") : (echo "$num no es igual a 1");
?>
equivale a :
<?php
$num = "1";
if ($num == "1")
{
echo "$num es igual a 1";
}
else
{
echo "$num no es igual a 1"
}
?>
switch
switch es una alternativa quizas mas legible cuando necesitamos evaluar una variable frente a multiples valores posibles:
<?php
$op = "a";
switch ($op) {
case "a":
// código que se ejecuta si $op vale "a"
break;
case "b":
// código que se ejecuta si $op vale "b"
break;
case "c":
// código que se ejecuta si $op vale "c"
break;
default:
// código a ejecutar por defecto si no se cumple ninguna condición
}
?>
El uso de break; es necesario, ya que en la estructura switch una vez cumplida una condición se ejecutan el resto de declaraciones (incluso las comprendidas en los casos que siguen). La orden break evita esto saltando fuera del switch y continuando la ejecución del resto del script. Si en lugar de break usamos exit, el resto del script no se ejecutará.
Otra sintaxis alternativa
En las clausulas if-else podemos sustituir la llave de apertura { por dos puntos, y la llave de cierre por endif:
<?php
if ($user == "pepe"):
// codigo para pepe
elseif ($user == "juan"):
// codigo para juan
else:
// codigo para quienes no son juan ni pepe
endif;
?>
bucles. While
A diferencia de los controles condicionales simples vistos hasta ahora, los bucles toman otro tipo de decisiones: si se da la condición, ¿cuantas veces he de ejecutar esta parte de código ?
<?php
$i=1;
while ($i <=10) {
echo "$i<br>";
$i++;
}
?>
Lo que traducido a lenguaje llano, viene a querer decir: mientras la variable $i tenga un valor menor de 10 ($i<=10), imprime $i y una nueva línea.
Para que el bucle funcione correctamente necesitamos cumplir dos condiciones. La primera, obvia, que $i sea inicialmente menor de 10. Si es inicialmente mayor, la condición no se cumple, y el bucle no se ejecuta.
La segunda, que a cada ejecución del código $i aumente de valor ($i++), lo que es imprescindible, ya que en caso contrario (si $i valiese siempre 1) la condición sería siempre cierta y no podríamos salir nunca del bucle.
while tiene también una sintaxis alternativa:
while (expr): sentencia ... endwhile;
Do while
La única diferencia que existe con el anterior es que aqui la condición se evalúa despues de ejecutar el código, por lo que el bucle será efectivo al menos una vez:
<?php
$i=11;
do
{
echo "$i<br>";
$i++;
}
while ($i <=10);
?>
For
<?php
for($i=1; $i<=10; $i++) {
echo "$i<br>";
}
?>
Similar en su funcionalidad a while, el bucle for toma tres parámetros, separados los dos primeros por punto y coma: valor inicial de la variable de control, valor final y incremento de la misma.


