Introducción - Estructuras de Control
Es difícil imaginar un programa sin estructuras de control. Éstas nos permiten
elegir diferentes caminos en función de los datos que evaluamos en cada
momento. En este capítulo trataremos dos tipos de estructuras de control:
• Estructuras de elección.
• Estructuras de bucle.
Las estructuras de elección permiten evaluar una condición o varias y elegir
el camino correcto. Las de bucle repiten un número determinado de
veces un conjunto de instrucciones.
Estructuras de elección
Existen dos tipos:
• Elección simple.
• Elección múltiple.
if-else
La sintaxis de esta estructura es:
if (condición) instrucción;
Si se cumple la condición se ejecuta la instrucción que le sigue. Si quiere
que se ejecuten varias instrucciones, debe utilizar el símbolo llave ( { instrucciones
¡ ).
if (condición) {
instruccionl;
instruccion2¡
instruccion3;
}
La estructura if puede ampliarse para que se pueda elegir entre condición
verdadera y falsa.
if (condición) {
instruccionl;
instrucción2;
instruccion3;
} else {
instruccionl ,-
instrucción2;
instruccion3;
}
Si la condición es verdadera se ejecutan las instrucciones inmediatamente
después del if y si la condición es falsa se ejecutan las instrucciones dispuestas
después de la palabra e l s e . Puede ver un ejemplo completo:
<?php
$valor = 23;
$valor2 = 27;
if ($valor < $valor2) {
echo "La variable valor es menor que valor2";
} else {
echo "La variable valor es mayor que valor2";
}
?>
elseif
Es muy común hacer comparaciones en cascada para comprobar varios
valores:
<?php
$dia=4;
if ($dia == 1) {
echo "El día es Lunes";
} else {
if ($dia == 2) {
echo "El día es Martes";
} else {
if ($dia == 3) {
echo "El día es Miércoles";
} else {
if ($dia == 4) {
echo "El día es Jueves";
}
}
}
}
?>
El patrón anterior es tan común, que existe una estructura especial para
manejarlo.
Puede escribir el ejemplo anterior con la palabra reservada e l s e i f de la
siguiente forma:
<?php
$dia=4;
if ($dia == 1) {
echo "El día es Lunes";
} elseif ($dia == 2) {
echo "El día es Martes";
} elseif ($dia == 3) {
echo "El día es Miércoles";
} elseif ($dia == 4) {
echo "El día es Jueves";
}
?>
El ejemplo anterior evalúa la variable $dia hasta que encuentra el valor
correcto y ejecuta las instrucciones.
switch
La construcción switch comprueba el valor de una expresión y permite
elegir entre un conjunto de instrucciones. El formato es el siguiente:
switch (expresión) {
case valorl :
instruccionl;
instruccion2;
instruccion3;
break;
case valor2 :
instruccionl;
instruccion2;
instruccion3;
break;
case valor3:
instruccionl;
instruccion2;
instruccion3;
break;
default:
instruccionl;
instruccion2;
instruccion3;
}
La expresión puede ser de cualquier tipo, siempre que devuelva un valor
de tipo entero, de coma flotante o de cadena de caracteres. Una vez evaluada
la expresión, se busca el valor en la instrucción case y, si coincide,
se ejecutan todas las instrucciones hasta la palabra reservada break. Si
no coincide ningún valor, se ejecutan las instrucciones por defecto.
Veamos un ejemplo completo:
<?php
$dia = 4 ;
switch ($dia) {
case 1:
echo "El día es Lunes";
break;
case 2 :
echo "El día es Martes";
break;
case 3 :
echo "El día es Miércoles";
break;
case 4 :
echo "El día es Jueves";
break;
case 5:
echo "El día es Viernes";
break;
case 6 :
echo "El día es Sábado";
break;
case 7:
echo "El día es Domingo" ;
break;
default:
echo "El día de la semana es incorrecto";
}
?>
Bucles
Los bucles son estructuras de control que permiten repetir varias veces
las mismas instrucciones.
while
El bucle while es el más básico de todos. La construcción básica es la siguiente:
while (condición) {
instrucciónl•
instrucción2;
instrucción3;
}
La condición se evalúa al principio.
Si es verdadera, se ejecutan las instrucciones que están dentro del bucle y
se vuelve a evaluar la condición.
Si la condición es falsa no se ejecutan las instrucciones y se continúa con el
desarrollo del programa.
Puesto que la condición se evalúa antes de ejecutar las instrucciones, es
posible que algunos bucles no se ejecuten ninguna vez.
El siguiente ejemplo muestra una instrucción while que no se ejecuta nunca,
porque la condición es falsa:
<?php
$variable = false;
while ($variable) {
echo "Esta linea no se ejecuta nunca";
}
?>
Existe la posibilidad de que un bucle se ejecute infinitas veces, si dentro
de las instrucciones no existe nada que cambie la condición que se evalúa
al principio.
<?php
$variable = true;
while ($variable) {
echo "CUIDADO: Esta línea se ejecuta siempre";
}
?>
El bucle while se puede utilizar para ejecutar un número determinado de
veces las instrucciones que implica.
Véase el ejemplo de la serie de Fibonacci.
<?php
$numero_anterior = 1;
$numero_posterior = 1;
$serie = 1 ;
$fin = 10000;
echo "Serie de Fibonacci:";
while ($serie < $fin) {
echo $serie. ", ";
$serie = $numero_anterior + $numero_posterior;
$numero_anterior = $numero_posterior;
$numero_posterior = $serie;
}
?>
Cada número de la serie de Fibonacci se forma sumando los dos númer -
anteriores.
En el ejemplo, la condición es que el número de la serie sea menor que t
número que marca la variable $f i n , es decir, si el número que indica ,¿
serie es mayor que 10.000 el bucle finaliza.
La variable $f in sirve de valor máximo y puede cambiarlo en función .:,
la cantidad de números que quiera tener en pantalla.
do-while
Este bucle es igual que el anterior, pero la condición se evalúa al final de
las instrucciones. Por lo tanto, el código que está entre las llaves se ejecuta
al menos una vez. El formato básico es el siguiente:
do {
instrucciónl;
instrucción2;
instrucción3;
}
while (condición);
Puede comprobar que la diferencia es mínima cuando utiliza esta estructura
de control para la serie de Fibonacci.
<?php
$numero_anterior = 1;
$numero_posterior = 1;
$serie = 1;
$fin = 6765;
echo "Serie de Fibonacci:";
do {
echo $serie.", " ;
$serie = $numero_anterior + $numero_posterior;
$numero_anterior = $numero_posterior;
$n'umero_posterior = $serie;
}
while ($serie < $fin);
?>
for
La construcción de bucle más complicada es la del for. Tiene la siguiente
sintaxis:
for (expresión inicial; condición de fin; expresión de fin) {
instrucciónl;
instrucción2;
instrucción3;
}
El funcionamiento es muy sencillo. La expresión inicial se ejecuta una sola
vez al principio del bucle.
La condición de fin se evalúa cada vez que se ejecuta el bucle. Si es verdadera
se continúa la ejecución y si es falsa se sale del bucle. Al final de cada
interacción se ejecuta la expresión de fin.
Puede simular la instrucción f or con una instrucción while de esta
forma:
expresión inicial;
while (condición de fin) {
instrucciónl;
instrucción2;
instrucción3;
expresión de fin;
}
Otra forma poco corriente es eliminar alguna o todas las expresiones de.
bucle. Si quita todas las expresiones se crea un bucle infinito:
fOr ( ; ; ) {
instrucciónl;
instrucción2;
instrucción3;
}
equivale a:
while (true) {
instrucciónl;
instrucción2;
instrucción3;
}
El caso contrario es añadir más de una condición en cada clase de expresión,
separadas por comas. En este caso, la condición de fin se evaluara :
falso si alguna de las cláusulas es falsa. En realidad funciona como un C
lógico.
<?php
for ($x = 1 , $y = 1, $z = 1; $y < 10, $z < 10; $x++, $y = $y -
2, $z = $z + 3) {
echo ("$x, $y, $z<br>");
}
?>
Un ejemplo clásico es la tabla de multiplicar:
<html>
<body>
<b>TABLA DE MULTIPLICAR</b>
<table border="l">
<?php
echo ("<tr>");
echo ("<thx/th>" ) ;
for ($cabecera = 1; $cabecera <= 10; $cabecera++) {
echo ("<th>") ;
echo $cabecera;
echo ("</th>") ;
}
echo ("</tr>");
for ($x = l;$x <= 10; $x++ ) {
echo ("<tr>") ;
echo ("<th>") ;
echo $x;
echo ("</th>");
for ($y = l;$y <= 10; $y++ ) {
$multiplicacion = $x * $y;
echo ("<td>") ;
echo ("$multíplícacíon");
echo ("</td>");
}
echo ("</tr>");
>
?>
</table>
</body>
</html>
break y continué
El camino ordinario para salir de un bucle es que la condición se evalúe a
false. Existe una forma especial de salir de un bucle, utilizando las palabras
reservadas b r e a k y c o n t i n u é . Su forma de actuar es la siguiente:
• break: Sale del bucle actual y continúa el programa.
• continué: Salta hasta el final de la interacción y continúa la ejecución
desde el principio del bucle.
El código siguiente muestra la forma de utilizar break:
<?php
for ($x = 1; $x < 20; $x++) {
if ($x == 10) {
break;
} else {
echo "$x<br>";
}
}
La salida por pantalla es una sucesión de números del 1 al 9. Al llegar la
variable $x al número 10, la condición del if se cumple y se ejecuta la
instrucción break, saliendo del bucle. Veamos ahora el mismo ejemplo,
pero utilizando c o n t i n u é:
<?php
for ($x = 1; $x < 20; $x++) {
if ($x == 10) {
continué;
} else {
echo "$x<br>";
}
}
?>
En este caso, cuando $x alcanza el valor 10,1o que hace la instrucción cont
i n u é es ir hacia el final de bucle y volver al principio comprobando la
condición.
El resultado por pantalla es una sucesión de números desde el 1 hasta el
19, sin incluir el número 10.
Finalizar la ejecución de un programa
Hay veces que necesitamos parar la ejecución de un programa por diversas
causas: ha ocurrido un error, un fallo en la entrada del nombre y la contraseña.
La función para la ejecución es e x i t () o d i e () . Estas dos
funciones aceptan un parámetro que se imprime en pantalla. Por ejemplo,
considere el siguiente código que asume la conexión a una base de datos:
<?php
$conexion = conectar_base_datos("libros");
if ( !$conexion) {
die ("Se ha producido algún error en la conexión");
}
?>
Se puede apreciar que si la variable $ c o n e x i ó n se evalúa false (no se ha
conseguido la conexión), se detiene la ejecución del programa. Una versión
más compacta se consigue utilizando el operador or:
<?php
$conexion = conectar_base_datos("libros") or
die ("Se ha producido algún error en la conexión");
?>
Sintaxis alternativa
Algunas estructuras de control pueden escribirse de una forma distinta.
Las estructuras i f , w h i l e , f or y s w i t c h pueden escribirse sustituyen do la llave de inicio por un símbolo de dos puntos (:) y la llave de cierre
por e n d i f , endwhile, endf or y endswitch, respectivamente.
Como ejemplo podemos ver la estructura i f :
<?php
$variable = 10;
if ($variable == 10) {
echo "Nueva estructura de control";
}
?>
El código siguiente es equivalente al anterior:
<?php
$variable = 10;
if ($variable == 10):
echo "Nueva estructura de control";
endif;
?>
|