Está en la página 1de 9

Gestin y Administracin Web

ESTRUCTURAS DE CONTROL
Las sentencias pueden ser agrupadas en grupos de sentencias, que estarn encerradas dentro de llaves { }. Por consiguiente, un grupo de sentencias encerradas en llaves, son en realidad, una sola sentencia. Veremos los diferentes tipos de sentencias que puede haber en un programa PHP:

IF
"Si me gustan los chocolates, me los como" Una de las estructuras de control ms bsicas, y sin embargo una de las ms importantes, es la estructura if. Dicha estructura evala el valor de una expresin y dependiendo de si la evaluacin resulta verdadera o falsa, la sentencia a continuacin de if se ejecutar o se ignorar. La sintaxis es la siguiente:

El resultado en pantalla sera el siguiente:

Dado que 1 (valor de $a) es decididamente menor que 3 (el valor de $b), la sentencia echo "$a es menor que $b" se imprime en la pantalla de nuestro navegador de Internet. Si el caso hubiese sido que el valor de $a hubiese sido, por ejemplo 5, el navegador simplemente nos hubiese mostrado una pantalla vaca. Por favor observen que al final de la sentencia que contiene el IF, NO hay un punto y coma. Por favor tengan en cuenta que si ponen un punto y coma al final de la lnea de cdigo que contiene el IF, dicha sentencia, si bien se ejecutar, tendr un defecto de sintaxis que puede llegar a ser peligroso en caso de un programa verdaderamente grande. Si se dan cuenta la sentencia de impresin (o de salida a pantalla) dice echo "$a es menor que $b", pero el resultado en pantalla dice 1 es menor que 3. Lo anterior implica que, cuando imprimimos variables dentro de una instruccin echo, incluso cuando las variables estn incluidas dentro de las comillas, lo que se imprimir en pantalla ser el valor de dicha variable y no la cadena de caracteres que implica dicha variable, en nuestro ejemplo seran las cadenas "$a" y "$b". Si nuestro deseo es imprimir las cadenas de caracteres mencionadas, entonces

Lic. Mayra Orellana

pg. 1

Gestin y Administracin Web

debemos utilizar la instruccin de impresin de caracteres especiales \. En otras palabras, la instruccin debera ser echo "\$a es menor que \$b"; Con las correcciones anteriores, el resultado sera el siguiente:

Como resulta claro, el operador \, hace que el carcter especial $ se imprima en pantalla. Por otro lado, la mayora de las veces, necesitaremos agrupar ms de una sentencia, dentro de la sentencia IF. Si ese fuese el caso, debemos de tener en cuenta que despus del primer punto y coma, la sentencia IF se acaba, por ello, para encerrar a varias sentencias, dentro de la sentencia IF, debemos utilizar las llaves { } para encerrar a todas las sentencias que deseemos que estn dentro de nuestra estructura de control IF, de la siguiente forma:

Para el ejemplo anterior, el resultado en pantalla sera el siguiente:

As pus, por favor recuerden de encerrar entre llaves las sentencias que han de ir dentro de una sola sentencia IF.

Lic. Mayra Orellana

pg. 2

Gestin y Administracin Web

ELSE
"Si me gustan los chocolates me los como, sino, los regalo" En muchas ocasiones, la evaluacin verdadera de una sentencia no es suficiente, ya que en la mayora de las ocasiones es necesario hacer algo especfico si la evaluacin resulta verdadera o hacer otra cosa si la evaluacin resulta falsa. Para ello existe un complemento de la sentencia IF, que es la sentencia ELSE, la cual se ejecuta slo en caso de que la sentencia no resulte verdadera. Siguiendo con nuestro ejemplo anterior (y cambindolo un poco), tendramos:

Siendo que la evaluacin es falsa y definitivamente 3 no es menor que 1, nos vemos en la obligacin de hacer que nuestro programa reaccione ante este hecho. Por ejemplo si la sentencia no es menor, entonces, debe ser mayor y nos imprime el resultado en pantalla de la siguiente forma:

Sin embargo, hay algo que debera preocuparnos (pero,... siempre hay un pero, no es as?). Si leyeron bien las ltimas dos filas del prrafo anterior dicen si la sentencia no es menor, entonces, debe ser mayor, lo cual no debe ser algo mandatorio, porque, qu tal si no es ni mayor ni menor, sino ms bien igual. Esto implica que las sentencias IF...ELSE, no seran suficientes. Habr alguna forma de solucionar esto?, existir alguna sentencia que nos ayude a solventar este problema? La respuesta es S, s que la hay...

Lic. Mayra Orellana

pg. 3

Gestin y Administracin Web

ELSEIF
"Si me gustan los chocolates me los como, sino, los vendo, sino, los regalo" Cuando las evaluaciones de una expresin van ms all de una o dos sentencias, entonces es necesario utilizar la instruccin elseif. Es decir, si la expresin 1 es verdadera se ejecutan las sentencias despus de la instruccin IF, sino, se ejecutaran las que acompaan a elseif, si la expresin 1 tampoco cumple con la evaluacin de elseif, entonces se ejecutan las sentencias de else. Para seguir con nuestro queridsimo y entraable ejemplo:

El resultado en pantalla sera:

Como podemos ver, basados en los valores de las variables, el segmento de cdigo que se ejecutar es el que corresponde a elseif, es decir: elseif($a>$b){ echo "\$a es mayor que \$b<BR>"; echo "El valor de \$a es $a y el valor de \$b es $b"; } Y el resultado en pantalla lo demuestra. Una ltima observacin que agregar es que podemos anidar sentencias IF...ELSEIF una dentro de otra, dentro de otra, dentro de otra, tantas veces como necesitemos, es decir:

Lic. Mayra Orellana

pg. 4

Gestin y Administracin Web

if(exp1){ sentencias } elseif(exp1){ sentencias } elseif(exp1){ sentencias }


Tantas veces como sea necesario. Sin embargo, por razones de legibilidad, esto no es recomendable y hay que decir que existen alternativas al anidamiento de sentencias. ESTRUCTURAS DE CONTROL Las estructura IF...ELSEIF...ELSE. Esta estructura nos permite tomar una decisin en cuanto al rumbo que nuestro programa tomar, dependiendo de si una condicin se cumple o no se cumple. En esta entrega iniciaremos con lo que se conoce como bucles, lo que no es ms que una sentencia que se repite una y otra vez, hasta que una condicin se cumple.

Empezamos:

WHILE
"Mientras sea de da, tengo que trabajar" La sentencia WHILE viene a ser como el primer eslabn de la cadena evolutiva de un bucle, es decir, el bucle ms sencillo que hay. Lo que hace esta sentencia no es ms que decirle a PHP que ejecute las sentencias que contenga la instruccin WHILE, tanto tiempo como la expresin se evale como verdadera (TRUE). La sintaxis de WHILE es: while(expresin){ sentencias } Como ejemplo pondremos lo siguiente:

El resultado en nuestro navegador sera el siguiente:

Lic. Mayra Orellana

pg. 5

Gestin y Administracin Web


Observaciones necesarias Como podrn observar, la sentencia WHILE, como se habrn dado cuenta, contiene el operador de comparacin menor que (<), el cual le dice a while que la variable $a N O DEBE llegar al nmero 11. Lo mismo pudo haberse logrado cambiando la sentencia por "$a <= 10;", lo cual, de hecho hubiese sido ms exacto y ms legible. Por otro lado, la sentencia echo $a."<BR>"; El operador punto (.), el cual, como ya sabemos, concatena resultados de cadena. En realidad, en nuestro ejemplo, la concatenacin es una seudoconcatenacin, ya que en realidad, el operador punto slo le dice a PHP que despus de la primera pasada por la variable $a (en la cual dicha variable vale 1), agregue un salto de lnea de HTML, es decir la etiqueta <BR>, de tal manera que al repetirse el bucle, siendo que $a todava es menor que 11, la respuesta siguiente (2), se imprima en otra lnea. Este mismo ciclo o bucle, se repetir hasta que la expresin se haga falsa, es decir cuando $a deje de ser menor que 11.

DO...WHILE
"Haz la limpieza, mientras an es de da" La similitud entre los bucles DO...WHILE y los bucles WHILE es enorme, salvo que en los bucles DO...WHILE se garantiza la ejecucin de las sentencias internas al menos una vez, dado que la validez de la expresin a evaluar se efecta hasta el final de la sentencia, cosa que no necesariamente debe pasar en un bucle WHILE, el cual evala la validez de la expresin al principio de la sentencia. La sintaxis de la sentencia DO...WHILE es la siguiente: DO{ sentencias }WHILE(expresin) Siguiendo la misma lnea del ejemplo anterior, tendramos:

Obteniendo exactamente el mismo resultado en pantalla:

Algo que debemos agregar de DO...WHILE en cuanto al ejemplo propuesto, es que aunque $a hubiese valido 11, la impresin de la pantalla se hubiese llevado a cabo. Por qu?, porque la evaluacin de la sentencia se llev a cabo hasta el final del bucle. Esto es una observacin realmente vital, pues si la intencin de nuestro programa hubiese sido la nunca imprimir el nmero 11 en pantalla, entonces nuestro programa hubiese fallado. Por favor tengan en cuenta lo anterior cuanto utilicen DO...WHILE

Lic. Mayra Orellana

pg. 6

Gestin y Administracin Web

FOR
"Para todos estos nios, reparte estos caramelos" La enorme belleza del bucle FOR, es que todo su poder se resume en una sola fila. La sintaxis de un bucle FOR es la siguiente: for (exp1; exp2; exp3) La primera expresin (exp1) se ejecuta una vez, al principio del bucle. La segunda expresin (exp2) se evala al comienzo de cada iteracin o retorno al bucle. La tercera expresin (exp3) se ejecuta al final de cada iteracin o retorno al bucle. Nuestro ejemplo sera:

El resultado en pantalla sera el siguiente:

Observaciones: En primer lugar, debemos notar que la variable $i es inicializada en 0 y termina en 10, por consiguiente, y en estos momentos podr parecer totalmente irrelevante pero puede llegar a salvarles la vida, el nmero de filas es 11 y no 10. Por otro lado, la variable $i es inicializada en la declaracin del bucle FOR y no antes.

En muchas ocasiones, es necesario forzar al flujo del programa para que se detenga o para que contine. Para esos casos, existen dos sentencias que podemos utilizar break y continue.

BREAK
"De aqu no has de pasar" La sentencia BREAK escapa del flujo de una sentencia IF, FOR o SWITCH

COTINUE
"De aqu en adelante, no me interesa lo que hagas" Esta sentencia se utilizar dentro de la estructura de un bucle para saltar el resto de la iteracin actual del bucle y continuar la ejecucin al comienzo de la iteracin siguiente.
Lic. Mayra Orellana pg. 7

Gestin y Administracin Web

SWITCH
"Como un ferrocarril cambiando de va" La sentencia switch evala la expresin y dependiendo del valor de la expresin, as se llevar a cabo un "caso" u otro. La sintanxis de SWITCH es la siguiente: switch(expresin){ case 1: sentencias a ejecutarse en caso de que expresin valga 1; break; case 2: sentencias a ejecutarse en caso de que expresin valga 2; break; default: sentencias a ejecutarse en caso de que expresin no cumpla con ninguno de los valores anteriores; } La sentencia break se ha colocado al final de cada posible caso de valor de expresin, dicindole a PHP que, si el valor de un caso especfico se cumple, el siguiente caso no habr de ser evaluado, sino que el flujo de nuestro programa continuar inmediatamente despus de la sentencia SWITCH. Adems, noten la presencia de la palabra default, la cual est en nuestro SWITCH como un salvavidas, pues en caso de que expresin no concuerde con ninguno de los posibles casos, la sentencia default se ejecutar. Ejemplo:
Lic. Mayra Orellana pg. 8

Gestin y Administracin Web

La salida en pantalla sera la siguiente:

SWITCH, es una forma de abreviar el trabajo de una serie de IF...ELSEIF...ELSE anidadas en un cdigo mucho ms elegante y mucho ms legible a la hora de hacer una depuracin para encontrar posibles errores o "bugs" en nuestro cdigo.

Lic. Mayra Orellana

pg. 9