jueves, 9 de octubre de 2014

Sentencias alternativas y ciclos en PHP

Una sentencia alternativa es la que ejecuta una instrucción si se cumple determinada condición. Un ejemplo de una sentencia simple con if:
 <?php
      $n = 1;
      $r = 2;
      if ($n < $r) {
            echo "$n es menor que $r.";
      }
?>

If lo que hace es comprobar una condición y si se cumple, ejecuta la instrucción que hay dentro. Si no, el programa seguirá ejecutando las instrucciones sin modificar nada.

Una sentencia alternativa doble es aquella que utiliza dos condiciones. Si la primera es verdadera, no se ejecuta la segunda y viceversa. Ejemplo:
<?php
     $n = 2;
     $r = 5;
     if ($n > $r) {
           echo "$n es mayor que $r.";
     } else {
           echo "$n es menor o igual que $r.";
     }
?>

El programa comprueba si un número es mayor que otro. Si n es mayor que r, ejecuta la primera instrucción. Si n es menor que r, ejecuta la segunda. Else es lo mismo que decir "Si la condición anterior es falsa, ejecutar lo siguiente."

Una sentencia alternativa múltiple es la que utiliza más de dos condiciones. En este caso, el programa va buscando una condición que se cumpla. Un ejemplo con switch:

<?php
     $anyo = 2014;
     $mes = 10;
     switch ($mes) {
          case 1:
          case 3:
          case 5:
          case 7:
          case 8:
          case 10:
          case 12:
                $dias = 31;
                break;
          case 4:
          case 6:
          case 9:
          case 11:
                $dias = 30;
                break;
          default:
                $dias = 28;
     }
     if ($mes = 2 && ((($anyo%4)==0) && (($anyo%100)!=0)) || (($anyo%400)==0))) {
          $dias = 29;
     }

     printf("El mes $mes del año $anyo tiene $dias dias");
?>


El programa comprueba cuántos días tiene el mes indicado del año indicado. Si el mes tiene uno de los valores antes del primer break (fin de la condición), tiene 31 días. Si su valor es uno de los siguientes, tendrá 30 y si no tiene ninguno de esos valores, se le pondrá el del default (por defecto), 28 días. La sentencia if comprueba si es año bisiesto. Si $mes tiene el valor 2 y además es año bisiesto, tendrá 29 días.

Un bucle o ciclo es una sentencia que se realiza repetidas veces a un trozo aislado de código, hasta que la condición asignada a dicho bucle deje de cumplirse. Se usa para hacer una acción repetida sin tener que escribir varias veces el mismo código, lo que ahorra tiempo, deja el código más claro y facilita su modificación en el futuro.

Hay cuatro tipos de bucles en PHP:
  • While: Primero evalua que la condición sea verdadera y luego se ejecuta (precondición), hasta que la condición pase a ser falsa. Puede que no se ejecute ninguna vez si su condición es inicialmente falsa. Ejemplo:
    <?php
    $i = 1;
    while ($i <= 10) {
    echo "$i";
    $i++;
    }
    ?>

    Este ejemplo inicializa una variable a 1 y luego pone la condición de que si la variable $i es menor o igual que 10, escribe el valor actual de la variable y luego le suma 1. La instrucción se repite hasta que $i pase de 10. Cuando pasa de 10, se termina el programa. Es "Mientras $i sea menor o igual que 10, escribir su valor actual y sumarle 1".
  • Do... While: Su uso es similar a while, pero aquí, las sentencias que siguen al do se ejecutan por lo menos una vez y se comprueba la condición después de la primera iteración. Así, si es verdadera la condición se repite por segunda vez, si es falsa se continúa con las sentencias inmediatamente después de la instrucción while. Ejemplo:
    <?php
    $i = 1;
    do {
    echo "$i";
    $i++;
    } while ($i <= 10);
    ?>

    Este ejemplo hace lo mismo que el anterior, solo que ahora primero se pone la instrucción a ejecutar y luego la condición. Es "escribir el valor de $i y sumarle 1 mientras que $i sea menor o igual que 10" (postcondición).
  • For: Los bucles for son los más complejos en PHP. Tienen la siguiente estructura:
    1. Inicialización: Es una expresión que se ejecuta sólo una vez al inicio y predetermina el primer valor inicial.
    2. Condición: Es una expresión que se evalúa como falsa o verdadera, si es falsa el bucle finaliza, en caso contrario el bucle ejecuta la sentencia.
    3. Actualización: Es una expresión que modifica la expresión de inicialización comúnmente en incremento o decremento.
    Ejemplo:
    <?php
    $i = 1;
    for ($i = 10) {
    echo "$i";
    $i++;
    }
    ?>

    Este bucle es similar al bucle while.
  • Foreach: Funciona sólo en arrays y presenta un error al utilizar una variable con diferente tipo o no inicializada. Es un buen método de iteración de objetos y arrays. Ejemplo:
    <?php
    $array = array(1, 2, 3, 4);
    foreach ($array as &$valor) {
        $valor = $valor * 2;
    }
    // $array ahora es array(2, 4, 6, 8)
    unset($valor); // rompe la referencia con el último elemento
    ?>
  • Ciclo iterar: En este ciclo la condición va en medio del bucle, si es verdadera sale del bucle. Ejemplo:
    <?php
        $n = 3;
        while ($n <= 10) {
            if ($n == 10) {
                 break;
            }
            echo "n es igual a $n";
            $n++;
        }
    ?>

    En este ciclo hay una segunda condición en medio del while. El programa ejecutará lo que hay dentro del while si n es menor o igual que 10. El if comprueba si n es igual a 10. Si es cierto, rompe con la ejecución del ciclo (break). Si no lo es, sigue el bucle while, escribe su valor actual y le suma 1 y vuelta a empezar. Esto se hará hasta que n valga 10, en ese caso se ejecutará lo que hay dentro del if.
     
Contadores y acumuladores
Un acumulador es un registro donde se almacenan los resultados lógicos y aritméticos intermedios. Sin un registro acumulador, sería necesario escribir el resultado de cada operación en la memoria primaria. Acceder a la memoria primaria es más lento que acceder a un registro acumulador.

Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso o acción. Se usan con la finalidad de contar sucesos o acciones internas de un bucle; deben realizar una operación de inicialización y posteriormente las sucesivas de incremento o decremento del mismo. La inicialización consiste en asignarle al contador un valor inicial. Se situará antes y fuera del bucle.