if ... elseif ... else
La intrucción if provee de ejecución condicional. Se puede acompañar de else y elseif.
if( $a > $b )
echo "a es mayor que b";
elseif( $a == $b )
echo "a es igual a b";
else
echo "a es menor que b";
if( $a >= $b ) {
echo "a es mayor o igual que b";
$mayor = $a;
} else {
echo "a es menor que b";
$mayor = $b; }
La sintaxis alternativa es útil para imprimir convenientemente fragmentos de HTML. En este caso se termina cada condición con un ':' (dos puntos) y la instrucción completa con endif;.
<H1>Listado de ventas</H1>
<% if( $orden == "fecha" ): %>
<P>Ordenadas por <B>fecha</B></P>
<% elseif ( $orden == "producto" ): %>
<P>Ordenadas según el <B>nombre</B> del producto</P>
<% endif; %>
while, do ... while
while permite crear ciclos sencillos, mientras una expresión sea cierta. La expresión puede ser evaluada al comienzo o al final:
$a = 10;
echo "Cuenta regresiva ...\n";
while($a > 0) {
echo $a-- ."\n"; # $a es impreso antes de disminuir su valor
} echo "Cero !!!"; # Cuando $a era cero, no fue impreso
$a = 10;
echo "Cuenta regresiva ...\n";
do {
echo $a-- . "\n";
} while( $a > 0 );
echo "Cero !!!"; # Cuando $a era cero, no fue impreso
La diferencia entre while y do ... while es que en este último caso la condición es evaluada al final del ciclo, es decir, el ciclo se ejecuta al menos una vez.
La sintaxis alternativa es terminar el ciclo con endwhile; (nótese que se escribe todo junto).
while(expresion): instruccion1; .. instruccionN; endwhile;
for
Un ciclo de este tipo tiene la misma sintaxis que en otros lenguajes: for(inicio;condicion;incremento).
for($a=1;$a<=10;$a++) {
echo "Tabla del $a\n";
for($b=1;$b<=10;$b++) {
echo "$a por $b es " . ($a * $b) . "\n";
};
echo "-----\n";
}
La sintaxis alterna es: for(): instr1; instr2; ...; instrN; endfor;
foreach
Supongamos que debemos recorrer un arreglo, podemos hacerlo así:
for($i=0;$i<count($arreglo);$i++) {
echo $arreglo[$i] . "\n";
}
O utilizar foreach, que crea internamente el iterador sobre el arreglo:
foreach( $arreglo as $elemento ) { echo $elemento . "\n"; };
[Nota para programadores PERL] Es equivalente al foreach $item ( @arr ) de Perl.
Si las llaves del arreglo no son números, es decir, si el arreglo es asociativo, se utiliza una construcción ligeramente diferente.
$tblApellidos["juan"] = "perez";
$tblApellidos["pedro"] = "gonzalez";
foreach( $tblApellidos as $nombre => $apellido ) { echo "$apellido, $nombre\n"; };
[Nota para programadores PERL] Es más conveniente que la construcción de perl foreach $key ( %hash ). Para obtener un iterador idéntico al de perl se podria usar foreach( array_keys($arreglo) as $key ).
break, continue
break sale del ciclo más interno que se esté ejecutando en ese momento. Puede recibir un parámetro que diga cuantos niveles "romper".
for($i=1;$i<=10;$i++) { for($j=1;$j<=10;$j++) { if( $j > $i ) break 2; ... ... } };
Un uso interesante de break es poder ejecutar una secuencia de acciones y abortarla a la mitad, sin utilizar ningún tipo de salto, sino sólo programación estructurada (algo así como un bloque try .. catch de Java)
do {
open( ... ) or break;
read( ... ) or break;
$ok = 1;
} while(0); # Ejecutar una sola vez
if( not $ok ) {
}
continue sirve para saltarse el resto de una ejecución en un ciclo, sin salir de él:
foreach( $arreglo as $elemento ) { if( es_especial($elemento=) ) continue; ... ... };