Estructuras de Control Cedeño Quimis-Vera Alcivar-Palma Andrade

42
Sentencias de control y Variables de Tiempo y fecha Programación Avanzada Ing. Rubén Solórzano Quinto A Cedeño Quimis Andrés Palma Andrade Luis Vera Alcívar Katiuska

Transcript of Estructuras de Control Cedeño Quimis-Vera Alcivar-Palma Andrade

Sentencias de control y Variables de Tiempo y fecha

Programación Avanzada

Ing. Rubén Solórzano

Quinto A

Cedeño Quimis Andrés Palma Andrade Luis Vera Alcívar Katiuska

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

1

ObjetivosEstudiar los conceptos básicos de sentencias y variables de tiempo y fecha en PHP.Comprender la estructura básica de sentencias de control.Entender el funcionamiento de las variables de tiempo y fecha en PHP.Plantear pequeños ejemplos de aplicación para el entendimiento del desarrollo en PHP.

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

2

TemáticaObjetivos......................................................................................................................................1

Introducción.................................................................................................................................4

Marco Teórico..............................................................................................................................5

Sentencias de Control..............................................................................................................5

if...............................................................................................................................................5

else...........................................................................................................................................5

elseif/else if..............................................................................................................................6

Sintaxis alternativa de estructuras de control..........................................................................6

While........................................................................................................................................7

do-while...................................................................................................................................8

for.............................................................................................................................................8

break........................................................................................................................................9

Continue.................................................................................................................................10

Switch.....................................................................................................................................10

declare...................................................................................................................................11

Ticks.......................................................................................................................................12

return.....................................................................................................................................13

require....................................................................................................................................13

Include....................................................................................................................................14

require_once..........................................................................................................................14

include_once..........................................................................................................................14

goto........................................................................................................................................15

Variables.................................................................................................................................15

Variables Tiempo y Fecha...........................................................................................................16

Ejercicios....................................................................................................................................23

IF............................................................................................................................................23

If - elseif..................................................................................................................................24

While......................................................................................................................................25

DO-WHILE...............................................................................................................................26

For..........................................................................................................................................27

Continue.................................................................................................................................29

Switch.....................................................................................................................................29

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

3

Declare...................................................................................................................................30

Time.......................................................................................................................................30

Microtime...............................................................................................................................30

Include – include_once...........................................................................................................31

Ejercicio de require – require_once.......................................................................................31

Combinar include con require_once y viceversa....................................................................31

Goto.......................................................................................................................................32

Conclusiones..............................................................................................................................33

Bibliografías................................................................................................................................33

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

4

Introducción

Todo script PHP está construido en base a una serie de sentencias. Una sentencia puede ser una asignación, una llamada de función, un ciclo, una sentencia condicional o incluso una sentencia que no hace nada (una sentencia vacía). Las sentencias generalmente finalizan con un punto y coma. Adicionalmente, las sentencias pueden agruparse en un conjunto de sentencias, encapsulándolas entre corchetes. Un grupo de sentencias es una sentencia por sí misma también. Los diferentes tipos de sentencias son descritos en este capítulo.

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

5

Marco Teórico

Sentencias de Control En lenguajes de programación, las sentencias de control o también llamadas estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa, así mismo tomar decisiones y realizar un proceso repetidas veces. Se trata de estructuras muy importantes, ya que son las encargadas de controlar el flujo de un programa, según los requerimientos del mismo.

Con las estructuras de control se puede:

de acuerdo a una condición, ejecutar un grupo u otro de sentencias (If-Then-Else y Select-Case)

Ejecutar un grupo de sentencias mientras exista una condición (Do-While) Ejecutar un grupo de sentencias hasta que exista una condición (Do-Until) Ejecutar un grupo de sentencias un número determinado de veces (For-Next)

Todas las estructuras de control tienen un único punto de entrada y un único punto de salida. Las estructuras de control se puede clasificar en: secuenciales, iterativas y de control avanzadas. Esto es una de las cosas que permite que la programación se rija por los principios de la programación estructurada.

ifEl constructor if es una de las características más importantes de muchos lenguajes, incluido PHP. Permite la ejecución condicional de fragmentos de código.

if (expresión) Sentencia

Como se describe en la sección sobre expresiones, la expresión es evaluada a su valor booleano. Si la expresión se evalúa como TRUE, PHP ejecutará la sentencia y si se evalúa como FALSE la ignorará.

El siguiente ejemplo mostraría a es mayor que b si $a es mayor que $b:

Las sentencias if pueden anidarse dentro de otra sentencias if infinitamente, lo cual provee completa flexibilidad para la ejecución condicional de diferentes partes del programa.

elseCon frecuencia se desea ejecutar una sentencia si una determinada condición se cumple y una sentencia diferente si la condición no se cumple. Esto es para lo que sirve else. El else extiende

<?phpif ($a > $b) {  echo "a es mayor que b";}?>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

6

una sentencia if para ejecutar una sentencia en caso que la expresión en la sentencia if se evalúe como FALSE.

Por ejemplo, el siguiente código deberá mostrar a es mayor que b si $a es mayor que $b y a NO es mayor que b en el caso contrario:

La sentencia else sólo es ejecutada si la expresión if es evaluada como FALSE y si hay algunas expresiones elseif - sólo se ejecuta si también todas son evaluadas como FALSE.

elseif/else ifelseif, como su nombre lo sugiere, es una combinación de if y else. Del mismo modo que else, extiende una sentencia if para ejecutar una sentencia diferente en caso que la expresión if original se evalúe como FALSE. Sin embargo, a diferencia de else, esa expresión alternativa sólo se ejecutará si la expresión condicional del elseif se evalúa como TRUE. Por ejemplo, el siguiente código debe mostrar a es mayor que b, a es igual que b o a es menor 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 sería ejecutada. En PHP también se puede escribir 'else if' (en dos palabras) y el comportamiento sería idéntico al de 'elseif' (en una sola palabra). El significado sintáctico es ligeramente diferente (si se está familiarizado con C, este es el mismo comportamiento) pero la conclusión es que ambos resultarían tener exactamente el mismo comportamiento.

La sentencia elseif es ejecutada solamente si la expresión if precedente y cualquiera de las expresiones elseif precedentes son evaluadas como FALSE, y la expresión elseif actual se evalúa como TRUE.

Sintaxis alternativa de estructuras de controlPHP ofrece una sintaxis alternativa para algunas de sus estructuras de control; a saber: if, while, for, foreach, y switch. En cada caso, la forma básica de la sintaxis alternativa es cambiar

<?phpif ($a > $b) {  echo "a es mayor que b";} else {  echo "a NO es mayor que b";}?>

<?phpif ($a > $b) {    echo "a es mayor que b";} elseif ($a == $b) {    echo "a es igual que b";} else {    echo "a es menor que b";}?>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

7

el corchete de apertura por dos puntos (:) y el corchete de cierre por endif;, endwhile;, endfor;, endforeach;, o endswitch;, respectivamente.

En el ejemplo anterior, el bloque HTML "A es igual a 5" se anida dentro de una sentencia if escrita en la sintaxis alternativa. El bloque HTML se mostraría solamente si $a es igual a 5.

La sintaxis alternativa también se aplica a else y elseif. El siguiente es una estructura if con elseif y else en el formato alternativo:

WhileLos bucles while son el tipo más sencillo de bucle en PHP. Se comportan igual que su contrapartida en C. La forma básica de una sentencia while es:

while (expresión) Sentencia

El significado de una sentencia while es simple. Le dice a PHP que ejecute las sentencias anidadas, tanto como la expresión while se evalúe como TRUE. El valor de la expresión es verificado cada vez al inicio del bucle, por lo que incluso si este valor cambia durante la ejecución de las sentencias anidadas, la ejecución no se detendrá hasta el final de la iteración (cada vez que PHP ejecuta las sentencias contenidas en el bucle es una iteración). A veces, si la expresión while se evalúa como FALSE desde el principio, las sentencias anidadas no se ejecutarán ni siquiera una vez.

Al igual que con la sentencia if, se pueden agrupar varias instrucciones dentro del mismo bucle while rodeando un grupo de sentencias con corchetes, o utilizando la sintaxis alternativa:

while (expresión): Sentencias ...endwhile;

<?phpif ($a == 5): ?>//A es igual a 5<?php endif;?>

<?phpif ($a == 5):    echo "a igual 5";    echo "...";elseif ($a == 6):    echo "a igual 6";    echo "!!!";else:    echo "a no es 5 ni 6";endif;?>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

8

do-whileLos bucles do-while son muy similares a los bucles while, excepto que la expresión verdadera es verificada al final de cada iteración en lugar que al principio. La diferencia principal con los bucles while es que está garantizado que corra la primera iteración de un bucle do-while (la expresión verdadera sólo es verificada al final de la iteración), mientras que no necesariamente va a correr con un bucle while regular (la expresión verdadera es verificada al principio de cada iteración, si se evalúa como FALSE justo desde el comienzo, la ejecución del bucle terminaría inmediatamente).

Hay una sola sintaxis para bucles do-while:

El bucle de arriba se ejecutaría exactamente una sola vez, ya que después de la primera iteración, cuando la expresión verdadera es verificada, se evalúa como FALSE ($i no es mayor que 0) y termina la ejecución del bucle.

forLos bucles for son los más complejos en PHP. Se comportan como sus homólogos en C. La sintaxis de un bucle for es:

for (expr1; expr2; expr3) Sentencia

La primera expresión (expr1) es evaluada (ejecutada) una vez incondicionalmente al comienzo del bucle.

En el comienzo de cada iteración, se evalúa expr2. Si se evalúa como TRUE, el bucle continúa y se ejecutan la/sy sentencia/s anidada/s. Si se evalúa como FALSE, finaliza la ejecución del bucle.

Al final de cada iteración, se evalúa (ejecuta) expr3.

<?php/* ejemplo 1 */

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

?>

<?php$i = 0;do {    echo $i;} while ($i > 0);?>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

9

Cada una de las expresiones puede estar vacía o contener múltiples expresiones separadas por comas. En expr2, todas las expresiones separadas por una coma son evaluadas, pero el resultado se toma de la última parte. Que expr2 esté vacía significa que el bucle debería ser corrido indefinidamente (PHP implícitamente lo considera como TRUE, como en C). Esto puede no ser tan inútil como se pudiera pensar, ya que muchas veces se debe terminar el bucle usando una sentencia condicional break en lugar de utilizar la expresión verdadera del for.

PHP también admite la sintaxis alternativa de los dos puntos para bucles for.

for (expr1; expr2; expr3): Sentencia ...endfor;

breakbreak termina la ejecución de la estructura actual for, foreach, while, do-while o switch.

break acepta un argumento numérico opcional el cual indica de cuantas estructuras anidadas encerradas se debe salir.

<?php/* ejemplo */

for ($i = 1; $i <= 10; $i++) {    echo $i;}?>

/* Usando el argumento opcional. */$i = 0;while (++$i) {    switch ($i) {    case 5:        echo "En 5<br />\n";        break 1;  /* Sólo sale del switch. */    case 10:        echo "En 10; saliendo<br />\n";        break 2;  /* Sale del switch y del while. */    default:        break;    }}?>

<?php$arr = array('uno', 'dos', 'tres', 'cuatro', 'pare', 'cinco');while (list(, $val) = each($arr)) {    if ($val == 'pare') {        break;    /* Se puede también escribir 'break 1;' aquí. */    }    echo "$val<br />\n";}?>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

10

ContinueContinue se utiliza 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, y luego comenzar la siguiente iteración.

Nota: Tenga en cuenta que en PHP la sentencia switch se considera una estructura iterativa para los propósitos de continue.

continue 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.

SwitchLa sentencia switch es similar a una serie de sentencias IF en la misma expresión. En muchas ocasiones, es posible que se quiera comparar la misma variable (o expresión) con muchos valores diferentes, y ejecutar una parte de código distinta dependiendo de a que valor es igual. Para esto es exactamente la expresión switch.

Cabe señalar que a diferencia de algunos otros lenguajes, la sentencia continue se aplica a switch y actúa de manera similar a break. Si se tiene un switch dentro de un bucle y se desea continuar a la siguiente iteración de del ciclo exterior, se utiliza continue 2.

Los dos ejemplos siguientes son dos formas diferentes de escribir lo mismo, uno con una serie de sentencias if y elseif, y el otro usando la sentencia switch:

<?phpwhile (list($clave, $valor) = each($arr)) {    if (!($clave % 2)) { // saltar los miembros impares        continue;    }    hacer_algo($valor);}

$i = 0;while ($i++ < 5) {    echo "Exterior<br />\n";    while (1) {        echo "Medio<br />\n";        while (1) {            echo "Interior<br />\n";            continue 3;        }        echo "Esto nunca se imprimirá.<br />\n";    }    echo "Ni esto tampoco.<br />\n";}?>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

11

Es importante entender cómo la sentencia switch es ejecutada con el fin de evitar errores. La sentencia switch ejecuta línea por línea (en realidad, sentencia por sentencia). Al principio, ningún código es ejecutado. Sólo cuando una sentencia case es encontrada con un valor que coincide con el valor de la sentencia switch, PHP comienza a ejecutar la sentencias. PHP continúa ejecutando las sentencias hasta el final del bloque switch, o hasta la primera vez que vea una sentencia break. Si no se escribe una sentencia break al final de la lista de sentencias de un caso, PHP seguirá ejecutando las sentencias del caso siguiente.

declareEl constructor declare es usado para fijar directivas de ejecución para un bloque de código. La sintaxis de declare es similar a la sintaxis de otros constructores de control de flujo:

declare (directive) statement

La sección directive permite que el comportamiento de declare sea configurado. Actualmente, sólo dos directivas están reconocidas: ticks (Ver abajo para más información sobre la directiva ticks) y encoding (Ver abajo para más información sobre la directiva encoding ).

<?phpif ($i == 0) {    echo "i es igual a 0";} elseif ($i == 1) {    echo "i es igual a 1";} elseif ($i == 2) {    echo "i es igual a 2";}

switch ($i) {    case 0:        echo "i es igual a 0";        break;    case 1:        echo "i es igual a 1";        break;    case 2:        echo "i es igual a 2";        break;}?>

<?phpswitch ($i) {    case "manzana":        echo "i es una manzana";        break;    case "barra":        echo "i es una barra";        break;    case "pastel":        echo "i es un pastel";        break;}?>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

12

La parte statement del bloque declare será ejecutada - como se ejecuta y que efectos secundarios ocurran durante la ejecución puede depender de la directiva fijada en el bloque directive.

El constructor declare también se puede utilizar en el alcance global, afectando a todo el código que le sigue (sin embargo, si el archivo con el declare fue incluido entonces no afectará al archivo padre).

TicksUn tick es un evento que ocurre para cada sentencia tickable N de bajo nivel ejecutada por el intérprete dentro del bloque declare. El valor para N se especifica usando ticks=N dentro del bloque de declare de la sección directive.

No todas las sentencias son tickable. Por lo general, expresiones de condición y expresiones de argumento no son tickables.

Los eventos que ocurren en cada tick se especifican mediante la register_tick_function(). Ver el ejemplo abajo para más detalles. Tener en cuenta que más de un evento puede ocurrir por cada tick.

<?php// estos son lo mismo:

// se puede usar ésto:declare(ticks=1) {    // script entero aquí}

// o se puede usar ésto:declare(ticks=1);// script entero aquí?>

<?php

declare(ticks=1);

// Una función llamada en cada evento tickfunction tick_handler(){    echo "tick_handler() llamado\n";}

register_tick_function('tick_handler');

$a = 1;

if ($a > 0) {    $a += 2;    print($a);}

?>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

13

return

Si se llama desde una función, la sentencia return inmediatamente termina la ejecución de la función actual, y devuelve su argumento como el valor de la llamada a la función. return también pondrá fin a la ejecución de una sentencia eval() o a un archivo de script.

Si se llama desde el ámbito global, entonces la ejecución del script actual se termina. Si el archivo script actual fue incluido o requerido con include o require, entonces el control es pasado de regreso al archivo que hizo el llamado. Además, si el archivo script actual fue incluido con include, entonces el valor dado a return será retornado como el valor de la llamada include. Si return es llamado desde dentro del fichero del script principal, entonces termina la ejecución del script. Si el archivo script actual fue nombrado por las opciones de configuración auto_prepend_file o auto_append_file en php.ini, entonces se termina la ejecución de ese archivo script.

Para más información, ver Retornando valores.

requirerequire es idéntico a include excepto que en caso de fallo producirá un error fatal de nivel E_COMPILE_ERROR. En otras palabras, éste detiene el script mientras que include sólo emitirá una advertencia (E_WARNING) lo cual permite continuar el script.

<?php function a(){     return $a['e'] = 'sometxt'; }

function b(){     $a['e']  = 'sometxt';     return $a; }

function c(){     if(is_array(a())){         echo 'a is array';     }else{         echo 'a is NOT an array';     }

    if(is_array(b())){         echo 'b is array';     }else{         echo 'b is NOT an array';     } } ?>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

14

Include

La sentencia include incluye y evalúa el archivo especificado. Los archivos son incluidos con base en la ruta de acceso dada o, si ninguna es dada, el include_path especificado. Si el archivo no se encuentra en el include_path, include finalmente verificará en el propio directorio del script que hace el llamado y en el directorio de trabajo actual, antes de fallar. El constructor include emitirá una advertencia si no puede encontrar un archivo, éste es un comportamiento diferente al de require, el cual emitirá un error fatal.

require_onceLa sentencia require_once es idéntica a require excepto que PHP verificará si el archivo ya ha sido incluido y si es así, no se incluye (require) de nuevo.

Ver la documentación de include_once para información sobre el comportamiento de _once, y como difiere de sus hermanos no _once.

include_onceLa sentencia include_once incluye y evalúa el fichero especificado durante la ejecución del script. Es un comportamiento similar al de la sentencia include, siendo la única diferencia que si el código del fichero ya ha sido incluido, no se volverá a incluir. Como su nombre lo indica, será incluido sólo una vez.

include_once puede ser usado en casos donde el mismo fichero podría ser incluido y evaluado más de una vez durante una ejecución particular de un script, así que en este caso, puede

<?php

$color = 'verde';$fruta = 'manzana';

?>test.php<?phpecho "Una $fruta $color"; // Unainclude 'vars.php';echo "Una $fruta $color"; // Una manzana verde?>

<?php require('somefile.php');?>

The following:<?phprequire 'somefile.php';?>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

15

ayudar a evitar problemas como la redefinición de funciones, reasignación de valores de variables, etc.

gotoEl 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.

Variables En PHP las variables se representan con un signo de dólar seguido por el nombre de la variable. El nombre de la variable es sensible a minúsculas y mayúsculas.

Los nombres de variables siguen las mismas reglas que otras etiquetas en PHP. Un nombre de variable válido tiene que empezar con una letra o un carácter de subrayado (underscore), seguido de cualquier número de letras, números y caracteres de subrayado.

<?phpinclude_once "a.php"; // esto incluirá a.phpinclude_once "A.php"; // esto incluirá a.php otra vez! (sólo PHP 4)?>

<?phpfor($i=0,$j=50; $i<100; $i++) {  while($j--) {    if($j==17) goto end;  }  }echo "i = $i";end:echo 'j alcanzó 17';?>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

16

Variables Tiempo y Fecha

Estas dos funciones nos permitirán mostrar o capturar la fecha y hora, lo cual tiene una gran cantidad de aplicaciones. Por ejemplo, supón que tienes una tienda on-line y para cada operación de venta tienes que registrar la fecha y hora de la venta. Estas funciones resultarán útiles para ello.

La función time devuelve el momento actual medido como el número de segundos desde el 1 de Enero de 1970 00:00:00 GMT. Cuando hablamos de momento actual nos referimos a la “hora actual del servidor”. Hay que tener cuidado con esta circunstancia. Por ejemplo, si trabajas con un servidor localizado en Estados Unidos lo más probable es que el servidor trabaje con la hora de Estados Unidos. Si quieres obtener la hora local de tu país, tendrás que tenerlo en cuenta para restarle o sumarle cierto número de horas a la hora que te devuelva el servidor.

Por otro lado, la función date muestra la fecha en formato d-m-Y (donde d representa día, m representa mes y Y representa año) desde el valor de time u otra fecha dada en segundos desde el 1 de Enero de 1970 00:00:00 GMT.

En general, te recomendamos que hagas pruebas para comprobar que los resultados de fecha y hora obtenidos son los adecuados, ya que la configuración de cada servidor es distinta.

Ejemplo 1

<?php //Ejemplo funciones básicas aprenderaprogramar.com

$time = time();

echo date("d-m-Y (H:i:s)", $time);

?>

La función time() devuelve un valor numérico entero largo, por ejemplo 1335169779. Este número representa el número de segundos transcurridos desde el 1 de enero de 1970.

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

17

Para transformar ese número en una fecha “entendible por las personas” usamos la función date, cuya sintaxis general es: date (“formato de salida”, valorTimeValido)

En cuanto a “formato de salida”, disponemos de las siguientes equivalencias:

d: representa el día

m: representa el mes

Y: representa el año

H: representa la hora (dos dígitos)

i: representa los minutos (dos dígitos)

s: representa los segundos (dos dígitos)

En cuanto a valorTimeValido, será un número, generalmente contenido en una variable.

Ejemplo 2

<?php$time = time();echo "<br/>";echo $time;echo "<br/>";echo date("d-m-Y (H:i:s)", -3600);echo "<br/>";echo date("d-m-Y (H:i:s)", 0);echo "<br/>";echo date("d-m-Y (H:i:s)", 3600);echo "<br/>";echo date("Y-m-d (H:i:s)", $time);echo "<br/>";echo date("Y-m-d ", $time);echo "<br/>";echo ("Según el servidor la hora actual es: ". date("H:i:s", $time));?>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

18

Con este ejemplo podemos comprobar algunas cosas. En primer lugar, que la función time() devuelve un número, mientras que la función date devuelve un String o cadena de texto.

En segundo lugar, que para obtener fechas anteriores al 1 de enero de 1970 podemos usar números negativos.

En tercer lugar, que el momento 0 que es el 01-01-1970 00:00:00 GMT, cuando es mostrado por un servidor concreto, es adaptado a su horario local. En el servidor del ejemplo, el horario local es GMT + 01:00, es decir, su hora es la hora GMT +01:00, por eso nos devuelve como hora cero la una de la mañana del 1 de enero de 1970. No te preocupes si te resulta un poco confuso, simplemente ten en cuenta que debes hacer pruebas para ver cómo responde el servidor con el que estés trabajando.

En cuarto lugar que podemos hacer que la fecha se muestre en el formato u orden que queramos, usando los términos clave “ d, m, Y, H, i, s” en el orden que queramos.

En quinto lugar, que podemos concatenar cómo se muestra una fecha (o almacenarla en otra variable si quisiéramos) concatenando el resultado de la función date con una cadena de texto cualquiera.

Parámetros de formato de date()

Devuelve valores de fecha y hora actuales utilizando los parámetros que se señalan en la tabla para establecer el formato de salida de los datos. Dentro de la misma cadena de formato puede contener tantos parámetros como se deseen.

Parámetros de formato de date()Valor Funcionalidad Sintaxis ResultadoA AM-PM date("A") PMA am-pm date("a") pmD Día del mes en formato de 2 dígitos date("d") 02

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

19

J día del mes sin ceros a la izquierda date("j") 2F Nombre del mes (texto completo) date("F") MayM Nombre del mes (3 letras) date("M") MayM Nº del mes (de 01 a 12) con dos dígitos date("m") 05N Nº del mes (de 1 a 12) sin dos dígitos date("n") 5Y Año con cuatro dígitos date("Y") 2013Y Año con dos dígitos date("y") 13G Hora 0-23 sin ceros a la izquierda date("G") 19H Hora 0-23 con dos dígitos date("H") 19G Hora 1-12 sin ceros a la izquierda date("g") 7H Hora 01-12 con dos dígitos date("h") 07I Minutos de 00 a 59 con dos dígitos date("i") 09S Segundos de 00 a 59 con dos dígitos date("s") 17L día semana en texto completo date("l") ThursdayD Día de la semana (tres letras) date("D") ThuW día semana de 0 (domingo) a 6 (sabado) date("w") 4Z días transcurridos del año actual date("z") 121T Número de días mes actual date("t") 31L Año actual bisiesto (1), no bisiesto (0) date("L") 0Z Diferencia (seg.) horaria local con GMT date("Z") 7200U Segundos Unix Epoch date("U") 1367514557S Sufijo ordinal inglés date("S") nd

Como puedes ver en este ejemplo, respeta los caracteres separadores (espacios, dos puntos, guiones, etcétera) que se hubieran incluido en la cadena de formato siempre que no coincidan con ninguno de los parámetros PHP para esta cadena.

Ejemplo 3

<?phpecho "Son las ", date("h : i : s")," y hoy es ", date("j-F-Y")?>

Validar una fecha - checkdate

Para validar una fecha se utiliza la función checkdate ( $mes, $dia, $anio) el valor que devuelve puede ser verdadero o falso.

Devuelve VERDADERO si los valores corresponden a una fecha correcta y FALSO en el caso de que no ocurra así.

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

20

Ejemplos de checkdate()

Mes Día Año Sintaxis Devuelve

10 32 1987 Checkdate(10,32,1987)

10 31 1987 Checkdate(10,31,1987)  1

2 29 2000 Checkdate(2,29,2000)  1

2 29 2001 Checkdate(2,29,2001)

gettimeofday()

Esta función devuelve un array asociativo con los siguientes índices:

– secEl valor asociado a este índice del array recoge la hora actual (Unix Each) expresada en segundos

– usecEl valor asociado a usec recoge la fracción en microsegundos de hora actual (Unix Each)

– minuteswestDevuelve los minutos al Oeste de Greenwich

– dsttimeDevuelve el tipo de corrección horaria según horarios de verano/invierno. El valor UNO corresponde a horario de verano, el valor CERO al de invierno y MENOS UNO en el caso en que sea desconocido.

Ejemplos de gettimeofday()Sintaxis Devuelve

$z= gettimeofday();echo $z;

Array

echo $z['sec']; 1367514557echo $z[usec]; 826013echo $z['minuteswest'']; -120echo $z['dsttime']; 1

Getdate()Devuelve un array asociativo con parámetros de la fecha actual. Los índices de este array y sus valores son los que puedes ver en la tabla.

Ejemplos de getdate()

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

21

Funcionalidad Sintaxis Devuelve

Devuelve un array asociativo$s=getdate(); echo $s;

Array

Este índice devuelve los segundos de la hora actual echo $s['seconds'] 17Este índice devuelve los minutos de la hora actual echo $s['minutes'] 9Este índice devuelve la hora de la hora actual echo $s['hours'] 19Este índice devuelve el día del mes actual echo $s['mday'] 2Este índice devuelve el nº del día de la semana echo $s['wday'] 4Este índice devuelve el nº del mes echo $s['mon'] 5Este índice devuelve el año echo $s[year] 2013Este índice devuelve nº del día en el año actual echo $s['yday'] 121Este índice devuelve el día de la semana echo $s['weekday'] ThursdayEste índice devuelve el nombre del mes echo $s['month'] May

getdate(número)

Interpreta el número como una fecha Unix Each (segundos transcurridos desde el día 1 de Enero de 1970) y devuelve un array asociativo con los valores relativos a esa fecha. Los índices de este array y sus valores son idénticos a los de getdate() tal como puedes ver en esta tabla.

Ejemplos de getdate(número)Funcionalidad Sintaxis Devuelve

Devuelve un array asociativo$s=getdate(127648); echo $s;

Array

Este índice devuelve los segundos de la hora actual echo $s['seconds'] 28Este índice devuelve los minutos de la hora actual echo $s['minutes'] 27Este índice devuelve la hora de la hora actual echo $s['hours'] 12Este índice devuelve el día del mes actual echo $s['mday'] 2Este índice devuelve el nº del día de la semana echo $s['wday'] 5Este índice devuelve el nº del mes echo $s['mon'] 1Este índice devuelve el año echo $s['year'] 1970Este índice devuelve nº del día en el año actual echo $s['yday'] 1Este índice devuelve el día de la semana echo $s['weekday'] FridayEste índice devuelve el nombre del mes echo $s['month'] January

time()Esta función devuelve la hora actual en segundos expresada en tiempo Unix.

<?phpprint "Han transcurrido ".time(). " segundos desde las cero horas del día 01-01-1970";?> 

Devolvería: Han transcurrido 1367514557 segundos desde desde las cero horas del día 01-01-1970

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

22

microtime()

Esta función devuelve una cadena formada la fracción de microsegundos de la hora actual expresada en tiempo Unix seguida de un espacio y de los segundos del tiempo Unix.

<?phpprint "Estamos en la fracción ".microtime(). " de segundo de la hora actual";?> Devolvería: Estamos en la fracción 0.82605800 1367514557 de segundo de la hora actual

mktime (hora, minuto, segundo, mes, día, año)

Devuelve el tiempo Unix de la fecha pasada como parámetro a la función. Es fundamental mantener la secuencia de los datos. Si se omiten argumentos (sólo pueden omitirse por la derecha) tomará los de la fecha actual.

Cuando el parámetro día es cero devuelve el último día del mes anterior, pero si pasamos cero como parámetro de mes nos dará un error.

Ejemplos de mktime()H Min Sec Mes Día Año Tiempo Unix Fecha

23 12 57 6 16 1973 109116777 23:12:57 16-Jun-197323 12 57 6 16 1973 109116777 23:12:57 16-Jun-197325 12 57 6 16 1973 109123977 01:12:57 17-Jun-197323 97 57 6 16 1973 109121877 00:37:57 17-Jun-197323 12 57 14 16 1973 130284777 23:12:57 16-Feb-197423 12 57 14 0 1973 128902377 23:12:57 31-Jan-1974

En los ejemplos de esta tabla puede verse cómo para valores fuera de rango (mes mayor de 12, minutos mayor de 60, etcétera) la función realiza la corrección correspondiente.

Ejercicios

IFEjemplo 1

<html>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

23

<body><?php

$a=1;$b=1;if($a==$b){

echo "$a es igual a $b";}else{

echo "$a no es igual a $b";} ?> </body></html>

Ejemplo 2

<html><body><?php

$x = 0; if ( isset($x) ) {

echo "La variable si existe."; } else {

echo "La variable no existe."; } ?> </body></html>

Ejemplo 3

<html><body><?php

$cadena = 'XY';if ( eregi('z', $cadena) ) { echo "¡'$cadena' Contiene una 'z' o 'Z'!";}else{

echo "¡'$cadena' NO contiene una 'z' o 'Z'!";}

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

24

?> </body></html>

If - elseifEjemplo 1<html><body><?php

$a=2;$b=1;if ($a > $b) {

echo "a es mayor que b";} elseif ($a == $b) {

echo "a es igual que b";} else {

echo "a es menor que b";}

?> </body></html>

Ejercicio 1<html><body><?php

//Utilizando la estructura if/elseif Comprobar si un numero se encuentra en los siguientes rangos://Mayor o igual que 40//Entre 35 y 39//Entre 30 y 34//Menor que 30

$test = 39; if ($test >= 40) { echo "$test es mayor o igual que 40."; } elseif ($test >= 35) { echo "$test se encuentra entre 35 y 39."; } elseif ($test >= 30) { echo "$test se encuentra entre 30 y 34."; } else {

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

25

echo "$test es menor que 30."; } ?> </body></html>

WhileEjemplo 1<html><body><?php

$x=1;while($x<=10){

echo "$x<br />\n";$x++;

} ?> </body></html>

Ejemplo 2<html><body><?php//Determinar que numeros son pares o impares $numero = 15;$pares = 0;$impares = 0;

while ( $numero > 0) {if ( $numero % 2 == 0 ) {echo "El $numero es un numero PAR <br> ";$pares++;}else {echo "El $numero es un numero IMPAR <br>";$impares++;}

$numero--;}echo "En total se han contado <strong>$pares numeros pares</strong> y <strong>$impares impares</strong>";

?> </body></html>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

26

Ejemplo 3<html><body><?php

$precio = 5; $cantidad = 10;

echo "<table border=\"1\" align=\"center\">";echo "<tr><th>Cantidad</th>";echo "<th>Precio</th></tr>";

while ( $cantidad <= 100 ) {echo "<tr><td>";echo $cantidad;echo "</td><td>";echo $precio * $cantidad;echo "</td></tr>";$cantidad = $cantidad + 10;

}echo "</table>";

?> </body></html>

DO-WHILEEjemplo 1<html><body><?php

$c =0;

do { echo "$c<br />\n"; $c++; } while ($c<=10);

?> </body></html>

Ejemplo 2<html><body><?php

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

27

$a=5;$suma=0;do{

echo "$a<br/>\n";$suma=$suma+$a;$a--;

}while($a>0);

echo "El total de la suma es $suma";

?> </body></html>

Ejercicio 1<html><body><?php

//Utilizando DO-WHILE Mostrar los multiplos de 3 del 0 al 30$a =0;do{

$a=$a+3;//$a+=3echo "$a<br/>\n";

}while($a<30);

?> </body></html>

ForEjemplo 1<html><body><?php

$x =array("UNO","DOS","TRES","CUANTRO");

for($i=0;$i<3;$i++){

echo "$x[$i]<br/>\n";}

?>

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

28

</body></html>

Ejemplo 2<html><body><?php

$x =array(array("UNO","DOS"),array("TRES","CUATRO"));for($i=0;$i<2;$i++){

for($j=0;$j<2;$j++){

echo $x[$i][$j];echo " <br/>\n";

}

}var_dump($x);

?> </body></html>

Ejercicio 1<html><body><?php

//Mostrar la tabla de multiplicar del 2. Utilizando WHILE, DO-WHILE y FOR

$a=2;$contador1=1;while($contador1<=12){

echo "$a X $contador1 =";echo $contador1*$a;echo "<br />\n";$contador1++;

}

echo "<br />\n";$b=2;$contador2=1;

do{echo "$b X $contador2 =";echo $contador2*$b;echo "<br />\n";

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

29

$contador2++;

}while($contador2<=12);

echo "<br />\n";$c=2;for($contador3=1; $contador3<=12; $contador3++){

echo "$c X $contador3 =";echo $contador3*$c;echo "<br />\n";

}

?> </body></html>

ContinueEjemplo 1<?php

for ($i=0; $i<50; $i++){

if(($i%4)==0)//si es divisible para 4{

continue; //Sentencia Continue}echo $i . "<br>";

}?>

SwitchEjemplo 1<?php$var=10;switch($var){

case 0:echo "La variable es cero";break;

case 1:echo "Es 1";break;

case 2:echo "Es 2";break;

case 3:echo "Es 3";break;

default:echo "No es ninguno de los casos";

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

30

}?>

DeclareEjemplo 1<?php function mifuncion() { print "In tick func\n"; }

register_tick_function("mifuncion"); declare(ticks=10) { for($i = 0; $i < 20; $i++) { print "Hola\n"; } }

declare(ticks=4) { for($i = 0; $i < 20; $i++) { print "Hola\n"; } }?>

TimeEjemplo 1<?php$semana_sig = time() + (7 * 24 * 60 * 60); // 7 días; 24 horas; 60 minutos; 60 segundosecho 'Ahora: '. date('Y-m-d') ."\n";echo 'Semana Siguiente: '. date('Y-m-d', $semana_sig) ."\n";// o usar strtotime():echo 'Semana Siguiente: '. date('Y-m-d', strtotime('+1 week')) ."\n";

?>

MicrotimeEjemplo 1<?php/** * Función sencilla para repetir el comportamiento de PHP 5 */function microtime_float(){ list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec);}

$time_start = microtime_float();

// Dormir por un momento

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

31

usleep(100);

$time_end = microtime_float();$time = $time_end - $time_start;

echo "No se hizo nada en $time segundos\n";?>

Include – include_once

index.php<?phpinclude 'datos.php';include_once 'datos.php';echo "continua....";?>

datos.php<?phpecho "Incluir datos con include <br/>";?>

Ejercicio de require – require_once

index.php<?phprequire 'datos.php';require_once 'datos.php';echo "continua....";?>

datos.php<?phpecho "Incluir datos con require <br/>";?>

Combinar include con require_once y viceversa.

index.php<?phpinclude 'datos.php';require_once 'datos.php';echo "continua....";?>

index.php<?phprequire 'datos.php';

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

32

include_once 'datos.php';echo "continua....";?>

Goto

Saltar a otra línea de código<?phpgoto a;echo ‘hola mundo'; a:echo ‘hello world';?>

Salir de un bucle con goto<?php$i=0;$j=0;for($i=0;$i<=20;$i++){

echo "$i <br/> ";if ($i==10) goto fin;}

fin:echo "-- la variable i llego a 10"?>

Conclusiones Hemos estudiado los conceptos básicos de sentencias de control y variables de tiempo

y fecha en php. Se ha comprendido la estructura básica de sentencias de control. Se ha entendido el funcionamiento de las variables de tiempo y fecha en php. Se han realizado ejercicios de aplicación para mejor entendimiento.

Programación AvanzadaSentencias de control y Variables de Tiempo y fecha

33

Bibliografías

http://www.rinconastur.com/php/php66.php

http://www.mclibre.org/consultar/php/lecciones/php_fecha_hora.html

http://php.net/manual/es/language.control-structures.php

http://www.openalfa.com/index.php/php/sentencias-control

http://www.aulaclic.es/paginas-web/a_11_2_2.htm

http://mmc.geofisica.unam.mx/LuCAS/Manuales-LuCAS/manual_PHP/manual_PHP/sintaxis/sentencias_control.htm