Estructuras de control

Todo script PHP está construido por una serie de sentencias que generalmente finalizan con un punto y coma. Estas sentencias son ejecutadas en PHP en estricto ordden secuencial desde el inicio del archivo. Las estructuras de control son usadas para cambiar esta condicion.

1. Condicional simple

Al procesar la sentencia IF se evalua condicion si es verdadera se ejecutara solo la primera parte del codigo. Si es falsa se ejecutara solo la segunda parte del codigo.

if (cond){
	...
}else{
	...
}

Tambien es posible la aplicacion simple de la sentencia donde se ejecuta si la conficion es verdadera y no se hace nada si es falsa.

if (cond) sentencia;
if (3 == $r) func();
(cond) ? verdadero : falso;
$v = 1;
$r = (1 == $v) ? 'Si' : 'No'; // $r es igual a 'Si'
$r = (3 == $v) ? 'Si' : 'No'; // $r es igual a 'No'
cond ? verdadero : falso;
$p = true;
echo $p ? 'Verdadero' : 'Falso';

Para comparar un valor contra una variable es mejor hacer valor == variable, porque si te equivocas y usas valor = variable PHP dara error, en cambio si usas variable = valor dentro del IF PHP simplemente reasigna la variable y devolvera TRUE. Mira el siguiente enemplo.

$x = 3
if ($x = 1) {
	echo 'SIEMPRE se ejecuta esto';
}else{
	echo 'NUNCA se ejecuta esto';
}

Tambien es posible anidar miltiples IF uno dentro de otro de manera infinita.

2. Condicional multiple

Al procesar la sentencia Switch se evalue la var y se ejecuta cada conjunto de inscrucciones hasta el final o hasta encontrar break lo que ocurra primero.

Switch (var){
case (val 1):
	...
	break;
case (val 2):
	...
	break;
case (val 3):
	...
	break;
default:
	...
}

Se pueden usar varios case seguidos sin break si se quiere ejecutar una misma sentencia para varios valores.

Switch ($x){
case (5):
case (4):
case (3):
	echo 'Entre tres y cinco';
	break;
case (2):
	echo 'Dos';
	break;
case (1):
	echo 'Uno';
	break;
default:
	echo 'Cero o mas de cinco';
}

3. Bucle fijo

Al ejecutar la sentencia For, primero se evalua inicio una sola vez. Normalmenta aqui se inicializan las variables. Luego, se evalua termino y si es verdadera se ejecuta las sentencias, de ser falsa la sentencia Fox concluye. Finalmente se especifica increm que es una expresion de alterar la variable cada ciclo. Se puede usar $x = $x + 1, o $x += 1, o $x++ que son sinonimos.

For (inicio;final,increm){
	...
}
For ($x = 1;$x < 10,$x ++){
	echo $x .'<br>';
}

Se pueden usar varias sentencias separadas por coma.

4. Bucle condicional previo

El bucle While evalua la cond y ejecuta las sentencias mientras siga siendo verdadera. Notar que cond se evaluan antes de manera que si la cond es falsa desde el inicio nunca se ejecutaran las sentencias ni una sola vez.

While (cond){
	...
}
$x = 1;
While ($x < 10){
	echo $x .'<br>';
	$x++;
}

5. Bucle condicional posterior

El bucle Do While evalua la cond al final y si cond es verdadera volvera a ejecutar las sentencias mientras cond siga siendo verdadera. Notar que las sentencias se ejecutaran por la menos una vez asi la cond sea falsa desde el inicio.

Do {
	...
} While (cond);
$x = 1;
Do {
	echo $x .'<br>';
	$x++;
} While ($x < 10);

6. Bucle sobre valores

Este blucle adicional solo se usa con matrices y objetos para tomar cada uno de sus valores. Al iniciar FOREACH el puntero de la matriz se posiciona automaticamente en el primer valor, por lo que es inecesario llamar a la funcion reset().

foreach (matriz as $valor)
    sentencias
foreach (matriz as $clave => $valor)
    sentencias
	
$a = array(1, 2, 3);
foreach ($a as &$valor) {
    echo $valor * 5; //Muestra 5, 10 y 15.
}
unset($a);
	
$a = array(2, 4, 6, 8);
foreach ($a as $clave => $valor) {
    echo "{$clave} => {$valor} = $a";
}

Modificacion del flujo

7.1 Break

break finaliza la ejecución de la estructuras: switch, for, while, do-while o foreach en curso. Acepta un argumento numérico opcional que indica de cuántas estructuras anidadas circundantes se debe salir. El valor predeterminado es 1, es decir, solamente se sale de la estructura circundante inmediata.

7.2 Continue

continue se usa dentro de las estructuras iterativas para saltar el resto de la iteración actual del bucle y continuar la ejecución en la evaluación de la condición, para luego comenzar la siguiente iteración. Acepta un argumento numérico opcional, que indica a cuántos niveles de bucles encerrados se ha de saltar al final. El valor por omisión es 1, por lo que salta al final del bucle actual.

while (list($clave, $valor) = each($arr)) {
    if (!($clave % 2)) { // saltar los miembros pares
        continue;
    }
    hacer_algo($valor);
}

7.3 GoTo

El operador goto puede ser usado para saltar a otra sección en el programa. El punto de destino es especificado mediante una etiqueta seguida de dos puntos y la instrucción es dada como goto seguida de la etiqueta del destino deseado. Este goto no es completamente sin restricciones. La etiqueta de destino debe estar dentro del mismo fichero y contexto, lo que significa que no se puede saltar fuera de una función o método, ni se puede saltar dentro de uno. Tampoco se puede saltar dentro de cualquier clase de estructura de bucle o switch. Se puede saltar fuera de estos y un uso común es utilizar un goto en lugar de un break multi-nivel.

goto a;
echo 'Primero';
 
a:
echo 'Segundo';

7.4 Return()

Return devuelve el control del programa al módulo que lo invoca. La ejecución vuelve a la siguiente expresión después del módulo que lo invoco.

return('hola);
a.php
<?php
include("b.php");
echo "a";
?>

b.php
<?php
echo "b";
return;
?>

Al ejecutar a.php se obtiene la cadera "ba"

Si no se suministra un parámetro, entonces NULL será retornado.

7.5 Exit() o Die()

Exit() o Die() finaliza la ejecucion del escript actual.

a.php
<?php
include("b.php");
echo "a";
?>

b.php
<?php
echo "b";
exit;
?>

Al ejecutar a.php se obtiene la cadera "b"

$arc = '/ruta/hacia/archivo-datos';
$arc = fopen($nombre_archivo, 'r') or die("no se pudo abrir el archivo ($arc)");

8. Sleep()

Retrasa la ejecución del programa durante el número de segundos dados.

sleep(n);
$i = 1;
while ($i <10){
	echo date('h:i:s') ."\n";
	sleep(10);
}

Vea tambien
FuncionDescripcion
usleep()Retrasar la ejecución en microsegundos
time_nanosleep()Retrasar por un número de segundos y nanosegundos
time_sleep_until()Hacer que el script duerma hasta el momento especificado
set_time_limit()Limita el tiempo máximo de ejecución