Inicio arrow Artículos arrow php arrow Manual PHP+MySQL (IV - Sentencias de control)
Menú Principal
Lo más leído
Consigue Firefox
Usuarios
993 registrados
1 hoy
5 esta semana
138 este mes
Último: gabity...
Formulario de acceso



... Regenerar clave
... Registro
Manual PHP+MySQL (IV - Sentencias de control) Imprimir E-Mail
martes, 31 de enero de 2006

Todo archivo de comandos PHP se compone de una serie de sentencias. Una sentencia puede ser una asignación, una llamada a función, un bucle, una sentencia condicional e incluso una sentencia que no haga nada (una sentencia vacía). Las sentencias normalmente acaban con punto y coma. Además, las sentencias se pueden agrupar en grupos de sentencias encapsulando un grupo de sentencias con llaves. Un grupo de sentencias es también una sentencia. En este capítulo se describen los diferentes tipos de sentencias que harán que ciertos bloques de código se ejecuten o no dependiendo del contenido y el valor devuelto por la misma.

 

if

La construcción if es una de las más importantes características de muchos lenguajes, incluido PHP. Permite la ejecución condicional de fragmentos de código. PHP caracteriza una estructura if que es similar a la de C:

if (expr)
    sentencia

expr se evalúa a su valor condicional. Si expr se evalúa como TRUE, PHP ejecutará la sentencia, y si se evalúa como FALSE  la ignorará. Como en muchos otros lenguajes, PHP toma el valor 0 como FALSE y cualquier otro valor como TRUE. Comprobemos en el siguiente ejemplo cómo se mostraría a es mayor que b si $a fuera mayor que $b:

if ($a > $b)
    print "a es mayor que b";

Dentro de un mismo bloque de control se pueden insertar tantas lineas de código (sentencias) como queramos, no teniendo que utilizar un if por cada una de ellas. De la misma forma, Las sentencias if se pueden anidar indefinidamente dentro de otras sentencias if, lo cual proporciona una flexibilidad completa para ejecuciones condicionales en las diferentes partes de un programa.

 

else

Invariablemente ligada a la sentencia if, else ejecutará una sentencia distinta de la comparación principal si esta no se establece a TRUE. Por ejemplo, el siguiente código mostraría a es mayor que b si $a fuera mayor que $b, y a NO es mayor que b en cualquier otro caso:

if ($a > $b) {
    print "a es mayor que b";
    } else {
        print "a NO es mayor que b";
}

La sentencia else se ejecuta solamente si la expresión if se evalúa como FALSE, y si hubiera alguna expresión elseif sólo se ejecutará si esta se evalúa también a FALSE.

 

elseif

Mediante elseif ejecutaremos en cascada tantas condiciones como queramos, sin limitación de ningún tipo. como su nombre sugiere, es una combinación de if y else. Como else, extiende una sentencia if para ejecutar una sentencia diferente en caso de que la expresión if original se evalúa como FALSE. No obstante, a diferencia de else, ejecutará esa expresión alternativa solamente si la expresión condicional elseif se evalúa como TRUE. Por ejemplo, el siguiente código mostraría a es mayor que b, a es igual a b o a es menor que b:

if ($a > $b) {
    print "a es mayor que b";
    } elseif ($a == $b) {
        print "a es igual que b";
    } else {
        print "a es mayor que b";
}

Puede haber varios elseif dentro de la misma sentencia if. La primera expresión elseif (si hay alguna) que se evalúe como TRUE se ejecutaría. En PHP, también se puede escribir 'else if' (con dos palabras) y el comportamiento sería idéntico al de un 'elseif' (una sola palabra). El significado sintáctico es ligeramente distinto (si estas familiarizado con C, es el mismo comportamiento) pero la línea básica es que ambos resultarían tener exactamente el mismo comportamiento.
La sentencia elseif se ejecuta sólo si la expresión if precedente y cualquier expresión elseif precedente se evalúan como FALSE, y la expresión elseif actual se evalúa como TRUE.

 

while

La sentencia while ejecutará un determinado bloque de código siempre que la evaluación de la expresión se establezca a TRUE. La forma básica de una sentencia while es la siguiente:

while (expr) sentencia

El valor de la expresión es comprobado cada vez al principio del bucle, así que incluso si este valor cambia durante la ejecución de la sentencia, la ejecución no parará hasta el fin de la iteración (cada vez que PHP ejecuta las sentencias en el bucle es una iteración). A veces, si la expresión while se evalúa como FALSE desde el principio de todo, la sentencia no se ejecutarán ni siquiera una vez.
Al igual que acurría con la sentencia if, se pueden agrupar multiples sentencias dentro del mismo bucle while encerrando un grupo de sentencias con llaves, o usando la sintaxis alternativa:

while (expr): sentencia ... endwhile;

Veamos los siguientes ejemplos. Ambos imprimirán números del 1 al 10:

 

/* ejemplo 1 */

$i = 1;
while ($i <= 10) {
    print $i++; /* el valor impreso sería
                $i antes del incremento
                (post-incremento) */
}

/* ejemplo 2 (sintáxis alternativa) */

$i = 1;
while ($i <= 10):
    print $i;
    $i++;
endwhile;

 

do..while

Los bucles do..while son muy similares a los bucles while, excepto que las condiciones se comprueban al final de cada iteración en vez de al principio. La principal diferencia frente a los bucles regulares while es que se garantiza la ejecución de la primera iteración de un bucle do..while (la condición se comprueba sólo al final de la iteración), mientras que puede no ser necesariamente ejecutada con un bucle while regular (la condición se comprueba al principio de cada iteración y si esta se evalúa como FALSE desde el principio, la ejecución del bucle finalizará inmediatamente).
Comprobemos la única sintáxis válida de un bucle do..while :

$i = 0;
do {
    print $i;
} while ($i>0);

Veamos un ejemplo de uso combinando do..while con la instrucción break, que veremos más adelante:

$num = 1;
do {
    echo $num;
    if ($num == 3){
        echo "Aquí nos salimos \n";
        break
    }
    $num++
} while ($num < 5);

 

for

Los bucles for son los bucles más complejos en PHP. Se comportan como su contrapartida en C. La sintaxis de un bucle for es:

for (expr1; expr2; expr3) sentencia

La primera expresión (expr1) se evalúa (ejecuta) incondicionalmente una vez al principio del bucle.
Al comienzo de cada iteración, se evalúa expr2. Si se evalúa como TRUE, el bucle continúa y las sentencias anidadas se ejecutan. Si se evalúa como FALSE, la ejecución del bucle finaliza.
Al final de cada iteración, se evalúa (ejecuta) expr3.
Cada una de las expresiones puede estar vacía. Que expr2 esté vacía significa que el bucle debería correr indefinidamente (PHP implicitamente lo considera como TRUE, al igual que C). Esto puede que no sea tan inútil como se podría pensar, puesto que a menudo se quiere salir de un bucle usando una sentencia break condicional en vez de usar la condición de for.
Considera los siguientes ejemplos. Todos ellos muestran números del 1 al 10:

/* ejemplo 1 */
for ($i = 1; $i <= 10; $i++) {
    print $i;
}

/* ejemplo 2 */
for ($i = 1;;$i++) {
    if ($i > 10) {
        break;
    }
print $i;
}

/* ejemplo 3 */
$i = 1;
for (;;) {
    if ($i > 10) {
        break;
    }
print $i;
$i++;
}

/* ejemplo 4 */
for ($i = 1; $i <= 10; print $i, $i++) ;

Aunque la sentencia for es prescindible (cada sentencia for puede ser reemplazada por una while) es obvio que la complejidad de la misma se hace necesaria por ejemplo, en momentos en que necesitamos ejecutar código a condición de que una variable se encuentre entre dos valores. 

 

foreach

A partir de PHP4 se incluye la construcción foreach, a semejanza de perl y algunos otros lenguajes. foreach nos ofrece un modo sencillo de iterar sobre arrays. Hay dos sintaxis; la segunda es una extensión menor, pero igual de útil que la primera:

foreach(expresion_array as $value) sentencia
foreach(expresion_array as $key => $value) sentencia

La primera forma recorre el array dado por expresion_array. En cada iteración, el valor del elemento actual se asigna a $value y el puntero interno del array se avanza en una unidad (así en el siguiente paso, se estará mirando el elemento siguiente).
La segunda manera hace lo mismo, salvo que la clave del elemento actual será asignada a la variable $key en cada iteración.
Cuando foreach comienza su primera ejecución, el puntero interno a la lista (array) se reinicia automáticamente al primer elemento del array. Esto significa que no se necesita llamar a reset() antes de un bucle foreach.
Hay que tener en cuenta que foreach trabaja con una copia de la lista (array) especificada y no la lista en si, con lo cual el puntero de la lista no se modifica como en la construcción each.

Ejemplo de foreach:

$a = array(1, 2, 3, 17);
foreach($a as $v) {
    print "Valor actual de \$a: $v.\n";
}

 

break

break finaliza una estructura de control iterante (bucle) for, while, o switch. Acepta un parámetro opcional, el cual determina cuantas estructuras de control hay que escapar.

$i = 0;
while (++$i) {
    switch ($i) {
        case 5:
            echo "5\n";
            break 1; /* Sale sólo del switch. */
        case 10:   
            echo "10; saliendo...\n";
            break 2; /* Sale del switch y del while. */
    default:
    break;
    }
}

 

continue

continue se usa dentro de la estructura del bucle para saltar el resto de la iteración actual del bucle y continuar la ejecución al comienzo de la siguiente iteración. Acepta un parámetro opcional, el cual determina cuantos niveles (bluces) hay que saltar antes de continuar con la ejecución.

while (list($key,$value) = each($arr)) {
    if ($key % 2) { // salta los miembros impares
    continue;
    }
    funcion_p ($value);
}

 

switch..case..default 

La sentencia switch es similar a un conjunto de sentencias if en la misma expresión. Esto es, switch compara distintos valores concretos de una variable o una expresión y ejecuta un fragmento de código si una de esas comparaciones se establece a TRUE o ejecuta la sentencia default para todo aquello que no se compara. switch ejecuta sentencia a sentencia hasta llegar al final del bloque o hasta llegar a un break. Cada una de las sentencias va precedida de la sentencia case.

Observemos un ejemplo sencillo que nos hará entender mejor esta sentencia:

switch ($i) {
    case 0:
        print "i es igual a 0";
        break;
    case 1:
        print "i es igual a 1";
        break;
    case 2:
        print "i es igual a 2";
        break;
    default:
    print "i no es igual a 0, 1 o 2";
}

 

 

Comentario[s]

Sólo los usuarios registrados pueden escribir comentarios.
Por favor, valídate o regístrate.

Powered by AkoComment 2.0!

 
< Anterior   Siguiente >