php bloque2 1 introduccion

40
Curso programación en PHP y MySQL Código 10FP32CF148 Bloque II: El Lenguaje PHP Introducción al Lenguaje Ponentes: Vicente Martínez Martínez y Juan José Guarinos Huesca CEFIRE Específico de FP

Upload: sergio-jorda-aznar

Post on 02-Jan-2016

57 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: PHP Bloque2 1 Introduccion

Curso programación enPHP y MySQL

Código 10FP32CF148

Bloque II: El Lenguaje PHPIntroducción al Lenguaje

Ponentes:Vicente Martínez Martínez y Juan José Guarinos Huesca

CEFIRE Específico de FP

Page 2: PHP Bloque2 1 Introduccion

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.

Page 3: PHP Bloque2 1 Introduccion

Índice de contenidos1 - Presentación de la Sesión.......................................................................................5

2 - Sintaxis Básica.........................................................................................................6

3 - Comentarios ............................................................................................................7

4 - Instrucciones (Mi primer programa).........................................................................7

4.1 - Variables e Identificadores................................................................................8

4.2 - Operadores........................................................................................................9

4.2.1 - Operadores aritméticos...........................................................................10

4.2.2 - Operadores de asignación......................................................................10

4.2.3 - Operadores de comparación...................................................................11

4.2.4 - Operadores lógicos.................................................................................11

4.2.5 - Operadores Bit a Bit................................................................................12

4.2.6 - Operadores de incremento/decremento..................................................13

4.2.7 - Operador ternario....................................................................................14

4.2.8 - Operador de supresión o de control de error..........................................14

4.2.9 - Operador de ejecución............................................................................14

4.2.10 - Operador de tipo....................................................................................15

4.2.11 - Operadores de matrices........................................................................15

5 - Tipos De Datos.......................................................................................................16

5.1 - Tipos Escalares...............................................................................................16

5.1.1 - bolean (booleano)....................................................................................16

5.1.2 - integer (Entero)........................................................................................16

5.1.3 - float (número real de punto-flotante, conocido como 'double')...............16

5.1.4 - String (Cadena de caracteres)................................................................17

5.2 - Tipos compuestos............................................................................................20

5.2.1 - array.........................................................................................................20

5.2.2 - object ......................................................................................................20

5.3 - Tipos especiales..............................................................................................20

5.3.1 - resource ..................................................................................................20

5.3.2 - null...........................................................................................................20

5.4 - Pseudo-tipos....................................................................................................20

5.4.1 - mixed.......................................................................................................20

5.4.2 - number.....................................................................................................20

Page 4: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

6 - Conversión De Tipos..............................................................................................21

7 - Variables De Variable............................................................................................21

8 - Declarar Y Utilizar Constantes...............................................................................22

9 - Probar El Estado De Variables..............................................................................23

10 - Ámbito De Variables............................................................................................24

11 - Entrada y Salida de datos básica........................................................................26

11.1 - Salida.............................................................................................................26

11.2 - Entrada desde el terminal..............................................................................26

11.2.1 - Entrada desde un navegador................................................................27

12 - Bloques de Instrucciones.....................................................................................29

13 - Estructuras De Control.........................................................................................29

13.1 - Instrucción if...................................................................................................29

13.2 - Instrucción else..............................................................................................30

13.3 - Instrucción elseif............................................................................................30

13.4 - Estructuras Repetitivas o Bucles...................................................................31

13.4.1 - Nociones Básicas..................................................................................31

13.4.2 - Bucle while.............................................................................................32

13.4.3 - Bucle do…while.....................................................................................33

13.4.4 - Bucle for.................................................................................................34

13.4.5 - Bucle foreach.........................................................................................35

13.4.6 - break......................................................................................................36

13.4.7 - continue.................................................................................................36

13.5 - Condicional switch.........................................................................................37

14 - Anexo I - Esquemas algorítmicos básicos...........................................................39

14.1 - Contador........................................................................................................39

14.2 - Acumulador (Similar a contador)...................................................................39

14.3 - Switch (interruptor, también conocido como flag).........................................39

15 - Bibliografía...........................................................................................................40

- 4 -

Page 5: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

1 - 1 - PRESENTACIÓN DE LA SESIÓNPRESENTACIÓN DE LA SESIÓNAl desarrollar estas características básicas no pretendemos hacer un manual de referencia de PHP indicado en la bibliografía. Pero si que se recogen las características y funcionalidades principales para empezar a desarrollar aplicaciones haciendo uso de su potencial principal.

Para aquellos que lleven tiempo sin programar o quieran empezar desde cero se van a incluir algunas nociones básicas de programación que se completarán a través de un apéndice en el bloque.

Para aquellos que tengan experiencia programando en lenguajes como C, C++, JavaScript, C#, Java, etc... este bloque pueden leerlo de forma rápida y saltar la gran mayoría de aspectos básicos de programación, sin embargo este material se ha incluido ya que puede ser de utilidad para nuestro alumnado.

- 5 -

Page 6: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

2 - 2 - SINTAXIS BÁSICASINTAXIS BÁSICAPhp simplemente interpreta el texto del archivo de código con extensión .php hasta que encuentra uno de los caracteres especiales que delimitan el inicio de código php.

<?php …código en php… ?>

<?phpif ($expression) {

?>

<b>Cierto.</b>

<?php} else {

?><b>Falso.</b>

<?php}

?>

Como vemos en el ejemplo el código php no tiene por que estar en un solo bloque de delimitadores. Todo el código fuera es interpretado tal cual por php.

Podremos encontrar código con otros delimitadores, incluso se pueden configurar en el php.ini. Pero si no usamos estos podemos tener problemas al embeber código php dentro de XML o XHTML.

Cualquier tipo de espacio en blanco como saltos de línea, tabuladores y espacio. Son ignorados por php puesto que también son ignorados por los navegadores en el código HTML.

- 6 -

Page 7: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

3 - 3 - COMENTARIOS COMENTARIOS Los comentarios del código se podrán realizar usando los siguientes delimitadores

• De bloque: /* ...comentario… */ (Como en C99)

• De línea: // ...comentario de una sola línea. (Como en C99) # ...comentario de una sola línea. (Como en Shell Script)

Deberemos tener cuidado de no anidar código comentado y de no comentar código fuera de los delimitadores <?php …?>, puesto que no tendrán ningún efecto.

Un comentario debe MERECER LA PENA y tiene que indicar de forma clara y concisa qué es lo que hace una sección del código de un algoritmo, y no cómo lo hace (para eso ya está el propio código).

4 - 4 - INSTRUCCIONES (MI PRIMER PROGRAMA)INSTRUCCIONES (MI PRIMER PROGRAMA)Las instrucciones en una secuencia, van separadas por el carácter punto y coma. Salvo la última que precede al delimitador ?> donde lo podemos obviar.

<?php echo 'Hola'; echo ' mundo'?>

primero.php

Supongamos que el script del ejemplo se encuentra en un fichero llamado primero.php. Para ejecutarlo podremos abrirlo desde un navegador haciendo una petición al servidor Apache o ejecutarlo desde un terminal mediante el comando:

$ php primero.php

Dentro de las instrucciones podremos encontrar...

- 7 -

Page 8: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

4.1 - 4.1 - Variables e IdentificadoresVariables e Identificadores

Las variables en php no hace falta declararlas y se representarán por un identificador precedido del símbolo del dólar $ (Estilo Perl o Sell-Script) cualquier otra cosa se considerará como un literal exceptuando operadores, palabras reservadas y funciones.

$variable = 12;

Los identificadores pueden tener cualquier longitud e incluir letras, números y guiones bajos (siguiendo siempre un determinado estilo). Aunque deberemos tener en cuenta que:

1 Como en otros lenguajes no pueden contener ningún tipo e carácter especial ni operador y evitaremos palabras reservadas como nombre.

2 No pueden comenzar por números. $1valor = 21;

3 El interprete discrimina entre mayúsculas y minúsculas. No es lo mismo $diaSemana (Camel Casing) que $DiaSemana (Pascal Casing)

4 Podemos usar el mismo identificador para una variable y una función aunque no es aconsejable .

5 Deben ser significativos, EVITAREMOS CONTRACCIONES en identificadores cortos y REDUNDANCIA dentro de un contexto. Buscaremos pues NOMBRES AUTODOCUMENTADOS.

6 Es importante utilizar una NOTACION o CONVENIO al nombrar e antiguamente en algunas notaciones se recomendaba indicar el tipo que se va a almacenar, cosa interesante en un lenguaje débilmente tipado como PHP.

“INCORRECTO” CORRECTO$6Caja $Caja6$tot $TotalUnidadesVendidas$ventlun $ventasLunes

- 8 -

Page 9: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

4.2 - 4.2 - OperadoresOperadoresEn PHP los operadores y la evaluación de expresiones son muy similares a las del lenguaje C. Deberemos tener claro a que tipo se van a evaluar y cual es la precedencia y asociatividad de los operadores con misma precedencia.

A grandes rasgos podemos decir que tendremos 2 tipos de expresiones:

• Las que se evalúan a algún valor escalar o cadena.

• Las que se evalúan a un valor booleano de cierto o falso (usan operadores lógicos y comparaciones).

En primer lugar vamos a ver una tabla con la asociatividad y prioridad de los operadores, esta última de mayor a menor:

Asociatividad Operadoresno-asociativo ()

no-asociativo new

derecha a izquierda []

no-asociativos ++ --

no-asociativos ! ~ - (int) (float) (string) (array) (object) @

izquierda a derecha * / %

izquierda a derecha + - .

izquierda a derecha << >>

no-asociativos < <= > >=

no-asociativos == != === !==

izquierda a derecha &

izquierda a derecha ^

izquierda a derecha |

izquierda a derecha &&

izquierda a derecha ||

izquierda a derecha ? :

derecha a izquierda = += -= *= /= .= %= &= |= ^= <<= >>=

izquierda a derecha and

izquierda a derecha xor

izquierda a derecha or

izquierda a derecha ,

Por ejemplo 1 + 4 * 5 se evaluará a 21 y no a 25, para evaluarse a 25 deberíamos poner paréntesis (1 + 4) * 5

Vamos a clasificar estos operadores según el tipo de operación...

- 9 -

Page 10: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

4.2.1 - Operadores aritméticosEjemplo Nombre Resultado-$a Negación El opuesto de $a. $a + $b Adición Suma de $a y $b. $a - $b Substracción Diferencia entre $a y $b. $a * $b Multiplicación Producto de $a y $b. $a / $b División Cociente de $a y $b. $a % $b Módulo Resto de $a dividido por $b. $a.$b Concatenación La cadena $b se concatena a $a.

• El operador de división '/' devuelve un valor flotante en todos los casos, incluso si los dos operandos son enteros. Con lo cual evitaremos el problema de la división entera donde 3 * 4 / 7 se evaluaba a 0.

• El resto de $a % $b es negativo para valores negativos de $a.

4.2.2 - Operadores de asignaciónEl operador básico de asignación es '=' en el cual el operando de la izquierda recibe el valor de la expresión a la derecha. Por ejemplo $a = ($b = 4) + 5; si analizamos la expresión evaluaremos primero el paréntesis $b toma el valor 4 y se evalúa todo a 4 quedando $a = 4 + 5 con $b = 4.

Combinar operadores de asignación.Podremos hacer combinaciones de algunos operadores con el operador '=' tal y como se ve en la tabla de precedencias += -= *= /= .= %= &= |= ^= <<= >>=. Su uso será por ejemplo $var *= 3 + 4; y equivaldrá a poner $var = $var * (3 + 4); Obviamente $var debería tener un valor asignado previamente.

EjemploEvalúa la expresión $a = -(4 * 4 / 2 - (4 * (8 % 2) + 12)) + 8 / 2 % 2; paso a paso teniendo en cuenta la precedencia de los operadores aritméticos.

$a = -(4 * 4 / 2 - (4 * (8 % 2) + 12)) + 8 / 2 % 2;$a = -(4 * 4 / 2 - (4 * 0 + 12)) + 8 / 2 % 2;$a = -(4 * 4 / 2 - ( 0 + 12) ) + 8 / 2 % 2;$a = -(4 * 4 / 2 - 12) + 8 / 2 % 2;$a = -(16 / 2 - 12) + 8 / 2 % 2;$a = -(8 - 12 ) + 8 / 2 % 2;$a = -( -4 ) + 8 / 2 % 2;$a = 4 + 8 / 2 % 2;$a = 4 + 4 % 2 ;$a = 4 + 0 ;$a = 4;

- 10 -

Page 11: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

4.2.3 - Operadores de comparación.Los operadores de comparación, como su nombre indica, permiten comparar dos valores o expresiones evaluándose a CIERTO O FALSO.

• Si compara un entero con una cadena, la cadena es convertida a un número. • Si compara dos cadenas numéricas, ellas son comparadas como enteros.• Para más información sobre comparaciones de diferentes tipos consultar

manual http://www.php.net/manual/es/language.operators.comparison.php

Ejemplo Nombre Resultado$a == $b Igual TRUE si $a es igual a $b.

$a === $b Idéntico TRUE si $a es igual a $b, y son del mismo tipo.

$a != $b Diferente TRUE si $a no es igual a $b. $a <> $b Diferente TRUE si $a no es igual a $b.

$a !== $b No idénticos TRUE si $a no es igual a $b, o si no son del mismo tipo.

$a < $b Menor que TRUE si $a es estrictamente menor que $b. $a > $b Mayor que TRUE si $a es estrictamente mayor que $b. $a <= $b Menor o igual que TRUE si $a es menor o igual que $b. $a >= $b Mayor o igual que TRUE si $a es mayor o igual que $b.

4.2.4 - Operadores lógicos.Se utilizan para realizar operaciones entre variables o valores booleanos y expresiones cuyo resultado es booleano.Si nos fijamos hay operadores repetidos '&&' equivale a 'and' y '||' equivale a 'or', pero tendrán precedencias diferentes (Ver tabla).

Ejemplo Nombre Resultado$a and $b Y TRUE si tanto $a como $b son TRUE. $a or $b O TRUE si cualquiera de $a o $b es TRUE. $a xor $b O exclusivo (Xor) TRUE si $a o $b es TRUE, pero no ambos. ! $a No TRUE si $a no es TRUE. $a && $b Y TRUE si tanto $a como $b son TRUE. $a || $b O TRUE si cualquiera de $a o $b es TRUE.

- 11 -

Page 12: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

EjemploEvalúa $a = 4 % 2 > 3 && 3 * 4 / 2 == 5 + 1 || !(6 <= 6) && true; paso a paso teniendo en cuenta la precedencia de los operadores.

$a = 4 % 2 > 3 && 3 * 4 / 2 == 5 + 1 || !(6 <= 6) && true;$a = 4 % 2 > 3 && 3 * 4 / 2 == 5 + 1 || ! true && true;$a = 4 % 2 > 3 && 3 * 4 / 2 == 5 + 1 || false && true;$a = 0 > 3 && 3 * 4 / 2 == 5 + 1 || false && true;$a = 0 > 3 && 12 / 2 == 5 + 1 || false && true;$a = 0 > 3 && 6 == 5 + 1 || false && true;$a = 0 > 3 && 6 == 6 || false && true;$a = false && 6 == 6 || false && true;$a = false && true || false && true;$a = false || false && true;$a = false || false ;$a = false;

4.2.5 - Operadores Bit a Bit.Los operadores bit a bit le permiten activar o desactivar bits individuales de un entero. Si los parámetros tanto a la izquierda y a la derecha son cadenas, el operador bit a bit trabajará sobre los valores ASCII de los caracteres.

Ejemplo Nombre Resultado$a & $b Y Los bits que están activos tanto en $a como

en $b son activados.

$a | $b O Los bits que están activos ya sea en $a o en $b son activados.

$a ^ $b O exclusivo (Xor) Los bits que estén activos en $a o $b, pero no en ambos, son activados.

~ $a No Los bits que estén activos en $a son desactivados, y vice-versa.

$a << $b Desplazamiento a izquierda

Desplaza los bits de $a, $b pasos a la izquierda (cada paso quiere decir "multiplicar por dos")

$a >> $b Desplazamiento a derecha

Desplaza los bits de $a, $b pasos a la derecha (cada paso quiere decir "dividir por dos")

- 12 -

Page 13: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

4.2.6 - Operadores de incremento/decremento.PHP ofrece soporte de operadores de pre- y post-incremento y decremento.

Ejemplo Nombre Efecto++$a Pre-incremento Incrementa $a en uno, y luego devuelve $a. $a++ Post-incremento Devuelve $a, y luego incrementa $a en uno. --$a Pre-decremento Decrementa $a en uno, luego devuelve $a. $*a-- Post-decremento Devuelve $a, luego decrementa $a en uno.

PHP sigue la convención de Perl cuando trabaja con operaciones aritméticas sobre variables de caracter, y no la convención de C. Por ejemplo, en Perl 'Z'+1 se convierte en 'AA', mientras que en C 'Z'+1 se convierte en '[' ( ord('Z') == 90, ord('[') == 91 ). Note que las variables de caracter pueden ser incrementadas pero no decrementadas.

$a = 3;$b = 7;$cadena = 'AB';echo "Sean a = $a, b = $b y cadena='$cadena'<br>";$c = --$a + $b++;// Por prioridad primero se hacen los incrementos y decrementos.// Por lo que $c = 2 + 7 con $a = 2 y $b = 8;echo "--a + b++ = $c<br>Con b = $b y a = $a<br>";++$cadena;echo "++cadena = '$cadena'"; // Imprime: ++cadena = 'AC'

- 13 -

Page 14: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

4.2.7 - Operador ternario.El operador ternário (Expr1) ? (Expr2) : (Expr3), funciona de la de la misma forma que en C y es similar a la instrucción if-else que veremos más adelante.

• Expr1: Se tratará de una condición y es aconsejable que se evalue a CIERTO o FALSO.

• Expr2: Será a lo que se evalue el operador ternário si la condición de Expr1 es CIERTA.

• Expr3: Será a lo que se evalue el operador ternário si la condición de Expr1 es FALSE.

$nota = 6;echo $nota >= 5 ? 'APROBADO' : 'SUSPENSO';// Imprime 'APROBADO'

Nota: Aunque este operador es muy útil y ahorra líneas de código, no conviene usar este operador como sustituto de if-else, ni en expresiones complejas, ya que puede dar lugar a código ofuscado.

$c=($a>0&&$b<=10)?++$a*$b:$a/$b; // Código ofuscado.

4.2.8 - Operador de supresión o de control de error.PHP ofrece soporte para un operador de control de errores: el signo de arroba '@'. Cuando es colocado al comienzo de una expresión en PHP, cualquier mensaje de error que pudiera generarse, incluso crítico, a causa de esa expresión será ignorado.El operador @ trabaja sólo sobre expresiones. Una simple regla de oro es: “si usted puede tomar el valor de algo, entonces puede usar el operador @ sobre ese algo”.

$a = 70/0; // Se genera un aviso de división por 0.$a = @(70/0); // No se genera ningún aviso.// En ambos casos $a se queda sin asignar.

Nota: Si la configuración track_errors está habilitada en el PHP.INI, cualquier mensaje de error generado por la expresión será almacenado en la variable global $php_errormsg. Esta variable será sobrescrita en cada ocurrencia de error.

4.2.9 - Operador de ejecuciónEste operador son las comillas invertidas o backticks (``) (Shell Script). PHP intentará ejecutar el contenido entre las comillas como si se tratara de un comando del intérprete de comandos del sistema operativo donde nos encontremos; su salida será devuelta y podrá asignarse a alguna variable. Tendremos una función equivalente denominada shell_exec().

$salida = `dir *.*`;echo "<pre>$salida</pre>";

- 14 -

Page 15: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

4.2.10 - Operador de tipo

instanceof es el operador de reflexión, usado para determinar si un objeto dado es de una clase de objeto especificada. Su uso quedará aclarado posteriormente cuando utilicemos aspectos de la POO en PHP como herencia y polimorfismo.

class A { }class B { }$objeto = new A;if ($objeto instanceof A)echo 'A';if ($objeto instanceof B)echo 'B';

4.2.11 - Operadores de matrices

Aplicables a operaciones con matrices. (Se explicarán al ver las mismas).

- 15 -

Page 16: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

5 - 5 - TIPOS DE DATOSTIPOS DE DATOSPuesto que en php no hace falta declarar variables, se puede decir que php es un lenguaje débilmente tipado, puesto que es el intérprete decide el tipo de una variable en el momento de utilizarla dependiendo del valor que tenga guardado en ese momento.Tendremos dos funciones especiales para gestionarlos:1 Para volcar el tipo y el contenido de una variable: void var_dump ( mixed

expresion [, mixed expresion [, ...]])2 Para saber el tipo: string gettype ( mixed var)3 Para forzar un tipo: int settype ( string var, string type)

PHP soporta ocho tipos primitivos.

5.1 - 5.1 - Tipos EscalaresTipos Escalares

5.1.1 - bolean (booleano)Se establecerá como resultado de asignar literales booleanos TRUE y FALSE o evaluar una expresión booleana.A la hora de hacer conversiones tendremos en cuenta que TRUE toma internamente el valor 1 y FALSE el valor 0.

$cierto = TRUE;$falso = FALSE;$expresion = ($cierto && $falso);var_dump($expresion);

No es una buena práctica utilizar 0 y 1 en lugar de los literales true y false.

5.1.2 - integer (Entero)Se establecerá como resultado de asignar expresiones o literales enteros (32 bits), que podrán ir de -2147483648 a 2147483647. Cualquier valor literal o resultado de una expresión, por encima o debajo de este rango se interpretará como float.

$a = 1234; // numero decimal$a = -123; // un numero negativo$a = 0123; // numero octal (83 decimal)$a = 0x1A; // numero hexadecimal (26 decimal)

5.1.3 - float (número real de punto-flotante, conocido como 'double')Se establecerá como resultado de asignar literalas o expresiones cuyo resultado esté por encima del rango entero o con decimales.Deberemos tener cuidado al usarlos ya que puedan dar problemas de precisión comunes a cualquier lenguaje.

$a = .25 + 1.25;$b = 1.2e3;$c = 7E-10;

- 16 -

Page 17: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

5.1.4 - String (Cadena de caracteres)Se trata de una secuencia de bytes donde cada byte representa un caracter con codificación ISO-8859-1. PHP nos proporcionará funciones para gestionar otras codificaciones como UTF-8. (Ver apartado cadenas)Formas de especificar literales de cadena:

Entre comillas simples : La forma más recomendada ya que ganaremos eficiencia al ser su interpretación inmediata.

echo 'esta es una cadena simple';

echo 'Tambi&eacute;n puede tener saltos de l&iacute;nea embebidosen las cadenas de esta forma, ya quees v&aacute;lido';

// Imprime: Arnold dijo una vez: "I'll be back"echo 'Arnold dijo una vez: "I\'ll be back"';// Imprime: Copie de C:\ORIGEN a C:\DESTINOecho 'Copie de C:\ORIGEN a C:\\DESTINO';// Imprime: Esto no va a expandirse: \n una nueva lineaecho 'Esto no va a ponerse: \n en una nueva linea';// Imprime: Las variables no se $expanden $tampocoecho 'Las variables no se $expanden $tampoco se verá tal cual';

Como vemos podremos meter saltos de línea aunque después son ignorados y cualquier carácter es interpretado tal cual, salvo los siguientes caracteres de escape válidos:\' Comilla simple.\\ Barra Invertida.

Entre comillas dobles : Permite expandir el contenido de una variable dentro de la cadena.

Algunos autores lo consideran una mala práctica definir literales de cadena entre comillas dobles cuando estas no son necesarias, puesto que tardan más en interpretarse perdiendo así eficiencia. Además en ocasiones se hará complicado consultar el valor de la variable.

Nos permitirán ampliar el número de caracteres de escape válidos.\n Nueva línea \r Salto de carro\t Tabulación \\ Barra invertida\$ Signo dólar \" Comillas dobles\xFF Valor haxadecimal.

$mes = 'septiembre';// Imprime: Ahora viene un salto de línea.Ahora expandimos 'septiembre'echo "Ahora hay un salto de línea.\nAhora expandimos '$mes'";

$valor = 400;// Imprime: Son 400$ Caracter guion bajo _echo "Son $valor\$ Caracter guion bajo \x5F";

- 17 -

Page 18: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

Sintaxis heredoc :

Esta sintaxis viene del lenguaje Perl y nos permite definir cadenas extensas de forma elegante. Tendrá la siguiente sintaxis.$texto = <<<marcador linea 1 linea 2marcador

$valor = 400;/* Imprime:Esto es la primera línea.El "precio" es de 400$*/echo <<<FINEsto es la primera línea.El "precio" es de $valor\$FIN

El marcador es arbitrario, no debe aparecer en el texto y debe seguir las reglas de nomenclatura de los identificadores. Además para que cierre correctamente debe aparecer en la primera columna sin ningún tipo de sangría.Las variables también son expandidas como ocurre con las comillas dobles.

- 18 -

Page 19: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

Concatenación de cadenas

Como adelanto a la gestión de cadenas, vamos a hablar del operador de concatenación que es el carácter punto '.'. Este operador nos permitirá crear literales de cadena y darles formato junto a variables sin necesidad de expandir sus valores. Si en la expresión de concatenación ponemos una variable que no es de tipo string, tratará de convertirla a cadena para realizar la concatenación.

$nombre = 'Juan’;echo "Hola $nombre"; // Imprime: Hola Juan echo 'Hola '.$nombre; // Equivalente a lo anterior concatenando.

No se podrán concatenar literales numéricos.

Expandir expresiones complejas

En ciertos casos cuando expandamos variables necesitaremos utilizar las llaves { expresión compleja }. Todo lo que esté entre llaves se considerará como si no formase parte de la cadena y será interpretado y expandido dentro de la misma.

$precio = 400;// El símbolo de € lo toma como parte del identificador.echo "El precio es de $precio€";// No puede haber espacios entre las llaves.echo "El precio es de { $precio€}";

// Forma correcta.echo "El precio es de {$precio}€"; //Imprime: El precio es de 400€// Forma más correcta.echo 'El precio es de '.$precio.'€'; //Imprime: El precio es de 400€

Las llaves es conveniente utilizarlas si vamos a acceder a un campo indexado dentro de una array o si accedemos al atributo de algún objeto etc… como veremos más adelante.

- 19 -

Page 20: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

5.2 - 5.2 - Tipos Tipos compuestoscompuestos

5.2.1 - arrayUtilizado para almacenar conjunto de datos.(Las trataremos más adelante).

5.2.2 - object Utilizado para almacenar instancias de clases.(Las trataremos más adelante).

5.3 - 5.3 - Tipos Tipos especialesespeciales

5.3.1 - resource Representan recursos externos como por ejemplo conexiones a bases de datos. No tendremos por qué manipular este tipo de variables, simplemente las obtendremos y las pasaremos a otras funciones.(Las trataremos más adelante).

5.3.2 - nullToman este valor variables no definidas o las que no se les ha asignado nada. Así como a las que se le asigna null de forma literal.

5.4 - 5.4 - Pseudo-tiposPseudo-tipos

Introducidos por razones de legibilidad y aplicados a parámetros de funciones.

5.4.1 - mixedIndica que un parámetro puede aceptar múltiples tipos (no necesariamente todos).

5.4.2 - numberIndica que un parámetro puede ser integer o float.

- 20 -

Page 21: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

6 - 6 - CONVERSIÓN DE TIPOSCONVERSIÓN DE TIPOS

Al realizar operaciones entre tipos diferentes se realizará una conversión implícita al tipo de mayor rango.

En php tenemos la posibilidad de realizar conversiones explícitas entre tipos. Una forma es utilizando la sintaxis del cast explícito del lenguaje C.

$var1 = (tipo)$var2;

$varEntera = 3;$varReal = (double)$varEntera;

Deberemos tener cuidado al hacer este tipo de conversiones pues puede dar lugar a resultados inesperados. Para profundizar en el comportamiento deberemos consultar el manual oficial de php.

También tendremos la posibilidad de reinterpretar variables, utilizando funciones de utilidad como:

• int intval ( mixed var [, int base]) Obtiene una valor entero.

• double doubleval ( mixed var) Obtiene una valor double.

• string strval ( mixed var) Obtiene una cadena.

7 - 7 - VARIABLES DE VARIABLEVARIABLES DE VARIABLEPHP nos permite cambiar el nombre de una variable de forma dinámica. Su funcionamiento consiste en utilizar el valor de una variable como nombre de otra.

$valor = 400;$nombreVar= 'valor';$$nombreVar = 200;echo "$valor = {$$nombreVar}";

Por ejemplo si tenemos $nombreVar = ‘valor’ ..

$$nombreVar = 400 equivale ha hacer $valor = 400.

Puede ser útil por ejemplo para ir enumerando las variables de un formulario con un bucle, pero no conviene abusar de ellas pues pueden dar lugar a código ofuscado.

- 21 -

Page 22: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

8 - 8 - DECLARAR Y UTILIZAR CONSTANTESDECLARAR Y UTILIZAR CONSTANTESUna constante es un valor asignado que no se puede cambiar en ningún otro punto de la secuencia de comandos.

Para definirlas utilizaremos la función:

int define ( string name, mixed value [, int case_insensitive])

Como primer parámetro es el nombre de la constante que irá en mayúsculas separando las palabras por guión bajo (Misma que para lenguaje C). El segundo parámetro será el valor de la constante que sólo podrá ser bolean, integar, float o string.

define('PESETAS_POR_EURO', 166.386);$precioEur = 1200.;$precioPts = intval($precioEur * PESETAS_POR_EURO);echo "El precio es $precioEur € ($precioPts Pts)";

Su uso es interesante pues ”auto-documenta” el código y evita la aparición de números “mágicos” en el mismo.

1. Las constantes no necesitan anteponer el símbolo $ como las variables para ser referenciadas en el código.

2. Las constantes no se pueden expandir en literales de cadena con doble comilla.

Disponemos de la función array get_defined_constants ( void ) para ver todas las constantes definidas y también podemos usar int phpinfo( void ) para visualizar todas las constantes que tenemos ya predefinidas para nuestra configuración de PHP, según las extensiones que tengamos cargadas.

- 22 -

Page 23: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

9 - 9 - PROBAR EL ESTADO DE VARIABLESPROBAR EL ESTADO DE VARIABLESPHP dispone de una serie de funciones de utilidad que me permitirán comprobar el estado de las variables y es muy común encontrarlas en código php.

int unset ( mixed var)Me permite eliminar una variable definida con anterioridad.

int isset ( mixed var)Me devolverá 1(TRUE) si la variable existe y tiene valor 0(FALSE) en caso contrario.

int empty ( mixed var)Tendrá el funcionamiento inverso a isset, devolviéndome 1(TRUE) si la variable no esta definida y 0(FALSE) en caso contrario.

echo 'Hago $a=10;<br>';$a=10;echo 'isset($a)='.isset($a).'<br>';echo 'empty($a)='.empty($a).'<br>';echo 'Hago unset($a);<br>';unset($a);echo 'isset($a)='.isset($a).'<br>';echo 'empty($a)='.empty($a).'<br>';

- 23 -

Page 24: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

10 - 10 - ÁMBITO DE VARIABLESÁMBITO DE VARIABLESEl ámbito de una variable es el contexto dentro del que la variable está definida.Veamos que casos de ámbito se pueden dar en PHP (Tendremos un ejemplo de código donde se indica cada uno en la siguiente página):

1. Las constantes, una vez declaradas, siempre resultan visibles de forma global y se pueden usar dentro y fuera de funciones.

2. Las variables globales dentro de la secuencia de comandos son visibles en toda la secuencia de comandos pero no dentro de las funciones.

3. Las variables locales a funciones tienen restringido su ámbito a la función y dejan de existir cuando esta finaliza.

4. Las variables estáticas locales a funciones tienen restringido su ámbito a la función pero conservan su valor entre las ejecuciones de esta. (Lenguaje C)

5. Las variables globales locales a funciones hacen referencia a una variable global con mismo nombre o identificador.

6. Las variables “superglobales” son variables predefinidas en PHP y son visibles en toda la secuencia de comandos incluido el interior de las funciones.

Aunque vamos a mencionar a continuación profundizaremos en algunas de ellas a lo largo del curso.

a. $GLOBALSMatriz con todas las variables globales, puede servirnos para acceder a una variable global dentro de una función sin tener que declararla como global local a función.

b. $_SERVERMatriz con variables definidas por el servidor web ó directamente relacionadas con el entorno en don el script se esta ejecutando.

c. $_GETMatriz con variables proporcionadas al script por medio de GET.

d. $_POSTMatriz con variables proporcionadas al script por medio de POST.

e. $_COOKIEMatriz con la variables de cookies.

f. $_FILESMatriz con variables relacionadas con la carga de archivos.

g. $_ENVMatriz con variables de entorno.

- 24 -

Page 25: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

h. $_REQUESTMatriz con todas las variables de entrada del usuario ($_GET, $_POST, $_COOKIE). Cuando se utiliza la linea de comandos, argv y argc no son incluidas aquí.

i. $_SESSIONMatriz con las variables registradas en la sesión del script.

Supongamos que nos pasan con un HTTP GET la variable precio http://www.ejemplo.com/ejemplo.php?precio=200 accederemos al valor de precio de la siguiente forma:

echo 'El precio es: '.$_GET['precio'];

Veamos un ejemplo comentado donde vemos los diferentes casos de ámbito expuestos con anterioridad:

<?php// Definición constantedefine('CONSTANTE',3.1416);// Variables globales$globalA = 100;$globalB = 200;

// Función pruebafunction Prueba(){// Accederemos a la variable global globalA.

global $globalA;// Variable local su desaparece al terminar la función// se le asigna el valor 300 en cada llamada.

$localA = 300;// Variable local estática su valor permanece al terminar la // función. Sólo se asigna el valor 400 en la primera llamada.

static $localB = 400;$localA++;$localB++;

// Acceso desde el ámbito de la función.echo 'Dentro del ámbito de la función prueba<br>';echo "globalA = $globalA<br>"; // Válido caso 5echo "globalB = $globalB<br>"; // Inválido caso 2echo "sglobalB = {$GLOBALS['globalB']}<br>"; // Válido caso 6echo "localA = $localA<br>"; // Válido caso 3echo "localB = $localB<br>"; // Válido caso 4echo 'CONSTANTE = '.CONSTANTE.'<br>'; // Válido caso 1

}

Prueba(); // Tras la llamada $localB mantiene el valor incrementado.Prueba();

// Acceso desde el ámbito de la secuencia de comandos echo 'Dentro del ámbito de la secuencia de comandos global<br>';echo "globalA = $globalA<br>"; // Válido caso 2echo "globalB = $globalB<br>"; // Válido caso 2echo "sglobalB = {$GLOBALS['globalB']}<br>"; // Válido caso 6echo "localA = $localA<br>"; // Inválido caso 3echo "localB = $localB<br>"; // Inválido caso 4echo 'CONSTANTE = '.CONSTANTE.'<br>'; // Válido caso 1?>

- 25 -

Page 26: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

11 - 11 - ENTRADA Y SALIDA DE DATOS BÁSICAENTRADA Y SALIDA DE DATOS BÁSICA

Esta parte es solo introductoria y será ampliada más adelante. Se ha incluido aquí por si queremos realizar algún script sencillo de prueba para las estructuras básicas de control que se tratarán a continuación.

11.1 - 11.1 - SalidaSalidaYa hemos visto durante la explicación del tipo string, la salida la podemos hacer con el comando echo seguido de un espacio y una cadena de caracteres ya sea un literal, una variable o un conjunto de ambas. Lo que deberemos formatear es texto que entienda el navegador que utilicemos como cliente.Este comando funcionará también para scripts ejecutados desde un terminal.

11.2 - 11.2 - Entrada desde el terminalEntrada desde el terminal

Php no es un lenguaje pensado para interpretarse desde un terminal y mucho menos, para hacer entrada de datos desde el mismo. No obstante podremos realizar una entrada de datos utilizando un código similar al que se muestra a continuación.

<?php $stdin = fopen('php://stdin', 'r');

// Aquí introducimos los datos. echo 'Introduce el dato1: '; $dato1 = trim(fgets($stdin,1000)); echo 'Introduce el dato2: '; $dato2 = trim(fgets($stdin,1000));

// Aquí los mostramos después de introducirlos. echo "El dato1 es $dato1"; echo "El dato2 es $dato2"; fclose($stdin);?>

La instrucción $dato1 = trim(fgets($stdin, 1000)); parará la ejecución del script hasta que el usuario introduzca algo por el terminal y pulse retorno de carro, momento en el cual continuará la ejecución y la variable $dato1 tomará el valor introducido.

El tipo de la variable $dato1 será asignado según lo que introduzcamos.

- 26 -

Page 27: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

11.2.1 - Entrada desde un navegadorPara poder empezar a trabajar vamos a dar una mínima introducción que ampliaremos posteriormente, para ello, podemos decir que la forma más sencilla de pasar datos de entrada a un script de php desde un cliente web es a través del QUERY_STRING que tendrá un forma del tipo:

http://localhost/script.php?dato1=valor1&dato2=valor2&dato3=valor3

Ejemplohttp://localhost/script.php?nombre=Juanjo&edad=38

Fijémonos que tras el nombre del fichero o script que vamos a ejecutar se pone el carácter ? y tras el los diferentes datos que queremos pasarle al script separados por el carácter &.

En el script podremos acceder al valor del nombre a través de la variable superglobal $_GET con la sintaxis $_GET['dato1'] como ya hemos comentado.

Ejemplo$_GET['nombre'] se evaluará a la cadena "Juanjo" y $_GET['edad'] se evaluará al entero 38.

Si lo que queremos es hacerlo a través de un formulario tendremos que utilizar un código similar al siguiente:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head></head><body><?php if (isset($_GET['aceptar'])===true) { // Aquí añadiremos las líneas de código de nuestro programa y // accedereamos a los datos usando $_GET echo "El dato1 es {$_GET['dato1']}<br/>"; echo "La dato2 es {$_GET['dato2']}<br/>"; } else {?> <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="get"> dato1:<input name="dato1" value="" type="text"><br/> dato2:<input name="dato2" value="" type="text"><br/> <!-- Aquí añadiremos más datos entrada de forma análoga --> <input name="aceptar" value="Aceptar" type="submit"> </form><?php } ?></body></html>

script.phpEl resultado de visualizar el script anterior desde un navegador será:

- 27 -

Page 28: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

Tras introducir los datos y pulsar aceptar se ejecutará la parte que accede a los datos introducidos.

Si nos fijamos bien en la parte de la dirección se genera un QUERY_STRING con los datos introducidos tal y como hemos descrito.

La desventaja de este método frente a la introducción en la ejecución desde el terminal es que los datos se deben meter todos de una vez y de forma previa a la ejecución.

- 28 -

Page 29: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

12 - 12 - BLOQUES DE INSTRUCCIONESBLOQUES DE INSTRUCCIONESLlamaremos bloque de instrucciones al conjunto de varias instrucciones seguidas delimitadas entre dos llaves.

Ejemplo{

echo 'Hola ';echo 'caracola';

}

13 - 13 - ESTRUCTURAS DE CONTROLESTRUCTURAS DE CONTROLPermiten controlar el flujo de ejecución de sentencias y se pueden agrupar en condicionales (o de bifurcación) y en estructuras de repetición o bucles.Los programadores de lenguaje C no tendrán ningún problema pues son muy similares a las de dicho lenguaje.

Como nomenclatura cuando nos refiramos a sentencia haremos referencia a 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). Además, las sentencias se pueden agrupar en grupos de sentencias encapsulando un grupo de sentencias con llaves. A esto último lo denominaremos bloque de sentencias.

13.1 - 13.1 - InstrucciónInstrucción if if

if (expresión) sentencia;

if (expresión) { bloque; }

Permite la ejecución condicional de fragmentos de código. expresión se evalúa a su valor condicional (boolean).Si Expr se evalúa como TRUE, PHP ejecutará la sentencia o bloque de sentencias, y si se evalúa como FALSE la ignorará.

// $dato toma un valor aleatorio$dato = 23;if ($dato == true)

echo 'Dato es cierto';if ($dato === true)

echo 'Dato es cierto';

Si observamos el código de ejemplo $dato no contiene un valor booleano puesto que se inicializa a un valor aleatorio. Sin embargo al usar == la expresión se evaluará a cierto. Hubiese dado igual poner if ($dato)… Esto puede ser fuente de errores, por tanto en PHP utilizaremos el operador ===.

- 29 -

Page 30: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

13.2 - 13.2 - Instrucción Instrucción elseelseif (expresión) sentencia_1; else sentencia_2;

if (expresión) { bloque_1; }else{ bloque_2;}

A menudo queremos ejecutar una sentencia si se cumple una cierta condición, y una sentencia distinta si la condición no se cumple. Esto es para lo que sirve else. else extiende una sentencia if para ejecutar una sentencia en caso de que la expresión en la sentencia if se evalúe como FALSE.

13.3 - 13.3 - Instrucción Instrucción elseifelseifif (expresión) Sentencia o Bloqueelseif (expresión) Sentencia o Bloqueelse Sentencia o Bloque

elseif, 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.

EjemploSe nos pide hacer un script de terminal en php que lea dos valores numéricos ‘X’ e ‘Y’, determine si son iguales y, en caso de no serlo, indique cuál de ellos es el mayor.

Solución<?php $stdin = fopen('php://stdin', 'r');

echo 'X? '; $X = trim(fgets($stdin,1000)); echo 'Y? '; $Y = trim(fgets($stdin,1000));

if ($X == $Y) echo 'Son iguales'; elseif ($X > $Y) echo 'X es mayor que Y'; else echo 'Y es mayor que X';

fclose($stdin);?>

- 30 -

Page 31: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

13.4 - 13.4 - Estructuras Repetitivas o BuclesEstructuras Repetitivas o Bucles

13.4.1 - Nociones Básicas•Repetición de una secuencia de instrucciones (iteración) en función de una condición de continuación o de finalización.

•El cuerpo de un bucle son las instrucciones incluidas dentro del mismo.

•Una ITERACIÓN es la ejecución del cuerpo del bucle

•Tipos de estructuras repetitivas:

•Repetición con condición inicial

•Repetición con condición final

•Repetición con condición con contador

•Diseño de un bucle:

•¿Qué instrucciones contiene el bucle?

•¿Cuantas veces se deben repetir?

•Errores:

•Deberemos llevar especial cuidado en evitar situaciones de BUCLE INFINITO.

- 31 -

S

condiciónverdadero falso

S

condiciónverdadero falso

Page 32: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

13.4.2 - Bucle whilewhile (expresión) sentencia;

while (expresión) { bloque; }

Le dice a PHP que ejecute la(s) sentencia(s) repetidamente, mientras la expresión while se evalúe como TRUE.

El valor de la expresión es comprobado cada vez al principio del bucle, así pues en alguna iteración (cada vez que PHP ejecuta las sentencias en el bucle es una iteración) del bucle deberemos cambiar los valores de expresión para que se evalué a FALSE, de lo contrario entraríamos en un bucle infinito.1

EjemploVeamos el siguiente ejemplo que genera código HTML para visualizar una tabla de pares hasta el número 100.

<table width="20%" border="1" cellspacing="0"><tr> <td> <b>Pares</b> </td></tr><?php $num = 0; while ($num <= 100) { if($num % 2 == 0) { echo '<tr>'; echo '<td>'.$num.'</td>'; echo '</tr>'; } $num++; } ?></table>

Como se puede apreciar en el ejemplo, podemos combinar más de una estructura de selección como en el resto de lenguajes estructurados.

1Ver Anexo I

- 32 -

Page 33: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

13.4.3 - Bucle do…whiledo sentencia; while (expresión);

do{ bloque; }while (expresión);

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.

EjemploVeamos el siguiente ejemplo que genera código HTML para visualizar una tabla de pares hasta el número 100.

<table width="20%" border="1" cellspacing="0"><tr> <td> <b>Pares</b> </td></tr><?php $num = 0; do { if($num % 2 == 0) { echo '<tr>'; echo '<td>'.$num.'</td>'; echo '</tr>'; } $num++; } while ($num < 100);?></table>

- 33 -

Page 34: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

13.4.4 - Bucle forfor (expresión1; expresión2; expresión3) sentencia; for (expresión1; expresión2; expresión3) { bloque}

Equivale a una estructura del tipo:

expresion1;while ( expresion2 ) { bloque expresion3;}

La primera expresión (expresión1) se evalúa (ejecuta) incondicionalmente una vez al principio del bucle.

Al comienzo de cada iteración, se evalúa expresión2. 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) expresión3.

EjemploVeamos el siguiente ejemplo que genera código HTML para visualizar una tabla de pares hasta el número 100.

<table width="20%" border="1" cellspacing="0"><tr> <td> <b>Pares</b> </td></tr><?php for ($num = 0; $num <= 100; $num++) { if($num % 2 == 0) { echo '<tr>'; echo '<td>'.$num.'</td>'; echo '</tr>'; } } ?></table>

- 34 -

Page 35: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

Pueden faltar alguna o todas las expresiones, pero deben permanecer los signos de punto y coma.

Ejemplos:$i=1; $suma=0;for ( ; $i<=10; ++$i) $suma += $i;

// Es equivalente a:

$i=1; $suma=0;for ( ; $i<=10 ; ) $suma += $i++;

Cuando falta la expresión2, se le supone valor verdadero siempre, formándose un ciclo sin salida.

Ejemplo:for (;;) echo 'Esto es un bucle infinito.';

13.4.5 - Bucle foreach

Se tratará en la parte del bloque II que habla sobre las matrices asociativas.

- 35 -

Page 36: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

13.4.6 - breakSe utiliza:

• Para forzar la salida inmediata de un bucle, saltando la evaluación condicional normal.

• Para terminar una cláusula "case" de sentencia "switch" y finalizar su ejecución.

EjemploPrograma que va calculando la raíz cuadrada de un número introducido, mientras este no sea negativo.

<?php $stdin = fopen('php://stdin', 'r'); while (true) { echo 'Introduce un número entero? '; $numero = trim(fgets($stdin,1000)); if ($numero < 0.0) break; $raiz = sqrt($numero); echo "La raíz cuadrada de $numero es $raiz"; } fclose($stdin);?>

No conviene abusar de esta instrucción pues en ocasiones puede hacer que nos dejemos algún tipo de recurso sin cerrar o liberar.

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

• continue accepta un parámetro opcional, el cual determina cuantos niveles (bluces) hay que saltar antes de continuar con la ejecución.

EjemploPrograma que le 10 números y los va mostrando si no coincide el número introducido con el 0.

<?php $stdin = fopen('php://stdin', 'r'); for (int i = 0; i < 10; ++i) { echo 'Introduce un numero? '; $numero = trim(fgets($stdin,1000)); if ($numero == 0) continue; echo $numero; } fclose($stdin);?>

- 36 -

Page 37: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

13.5 - 13.5 - Condicional switchCondicional switch

switch (expresión) { case literal1: sentencia; break; case literal2: { bloque break; } ... default: semtencia;}

La sentencia switch es similar a una serie de sentencias if en la misma expresión. En muchas ocasiones, se quiere comparar la misma variable (o expresión) con muchos valores diferentes, y ejecutar una parte de código distinta dependiendo de a qué valor es igual.Su sintaxis más común en como se muestra en el recuadro donde expresión se evaluará a un tipo único simple entero, double, cadena etc… y literal1, literal2 … son literales de ese tipo. default se ejecutará si expresión. No coincide con ninguno de los valores.

Es importante entender cómo se ejecuta la sentencia switch para evitar errores. La sentencia switch “ejecuta” línea por línea, cuando se encuentra una sentencia case con un valor que coincide con el valor de la expresión switch PHP comienza a ejecutar las sentencias. PHP continúa ejecutando las sentencias hasta el final del bloque switch, o la primera vez que vea una sentencia break2. Si no se escribe una sentencia break al final de una lista de sentencias case, PHP seguirá ejecutando las sentencias del siguiente case. Esta característica se puede utilizar para agrupar varios casos con un mismo grupo de sentencias, pero también puede dar lugar al llamado falltrought que trataremos de evitar pues es fuente de errores.

•paso 1 : Se evalúa la "expresión"

•paso 2 : Se ejecuta la claúsula "case" que se corresponda con el valor obtenido en el paso 1. Si no se encuentra correspondencia, se ejecuta el caso "default"; y si no hay "default", termina la ejecución de "switch".

•paso 3 : Termina cuando se encuentra una sentencia "break" esta es obligatoria para evitar caídas al vacío. (fall through )

2 Tener en cuenta que al contrario que otros lenguajes de programación, continue se puede aplicar en el switch y funciona de manera similar a break. Si se tiene un switch dentro de un bucle y se desea continuar con el paso siguiente en el bucle externo, se podría usar continue 2.

- 37 -

Page 38: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

EjemploVeamos un sencillo ejemplo en el que vamos a asignar a una variable $presupuesto el presupuesto de un departamento para una año. Teniendo en cuenta que el departamento de matemáticas tiene asignados 200€, los de lengua francés 500€ y el de informática 100€.

$departamento = 'INFORMATICA';

switch ($departamento) { case 'MATEMATICAS':

$presupuesto = 200; // falltrought. Seguirá ejecutando y // sobrescribirá 200 con el valor 500. case 'LENGUA': case 'FRANCES': // agrupación

$presupuesto = 500; break;

case 'INFORMATICA': $presupuesto = 100; break;

default: // Deben contemplarse todos los departamentos sino error.

assert(false);}

// $presupuesto debe quedar inicializada.assert(isset($presupuesto));echo $presupuesto;

- 38 -

Page 39: PHP Bloque2 1 Introduccion

El Lenguaje PHP Vicente Martínez MartínezIntroducción al lenguaje. Juan José Guarinos Huesca

14 - 14 - ANEXO I - ESQUEMAS ALGORÍTMICOS BÁSICOSANEXO I - ESQUEMAS ALGORÍTMICOS BÁSICOS

14.1 - 14.1 - ContadorContador• Una variable, normalmente de un tipo numérico, que se incrementa o

decrementa su valor de forma CONSTANTE.• El proceso se realizará normalmente en un bucle.• Inicializaremos su valor, para este quede definido.

Incrementaremos su valor con una expresión del tipo… $idContador = $idContador ± VALOR_FIJO

Ej: $nivel = $nivel + 2 ($nivel += 2) $vidas = $vidas – 1 ($vidas--) $tamanyo = $tamanyo * 2 ($tamanyo *= 2)

Ejemplo prácticoIntroducir las notas de matemáticas obtenidas por los 5 alumnos de una clase y contar cuántos de ellos han aprobado.Necesitaremos 2 contadores… uno para alumnos y otro para aprobados.

14.2 - 14.2 - Acumulador (Similar a contador)Acumulador (Similar a contador)• Una variable, normalmente de un tipo numérico, que se incremeta o

disminuirá su valor de forma VARIABLE.• El proceso se realizará normalmente en un bucle.• Inicializaremos su valor, para este quede definido.

Incrementaremos su valor con una expresión del tipo… idAcumulador = idAcomulador ± VALOR_VARIABLE Ej: totalFactura = totalFactura + lineaFactura

Ejemplo prácticoHallar la suma de los 100 primeros números naturales.Necesitaremos 1 contador para los números y otro para la suma.

14.3 - 14.3 - Switch (interruptor, también conocido como flag)Switch (interruptor, también conocido como flag)• Un switch es una variable que solo puede tomar dos valores diferentes

durante el desarrollo de un programa (de ahí el nombre).• Sus dos posibles valores los elige el programador y pueden ser, por ejemplo:

0 o 1; on u off; par o impar; si o no, etc…El switch se inicializa con uno de los dos valores elegidos.

• A lo largo del proceso, y dependiendo de que una determinada situación se haya producido, se le modifica dicho valor.

• Después, en otro punto del programa, al preguntar por su estado (su valor), se puede detectar si dicha situación ha ocurrido o no.

Ejemplo prácticoSumar por un lado los números impares y por otro los números pares comprendidos entre 1 y 100 usando

- 39 -

Page 40: PHP Bloque2 1 Introduccion

CEFIRE Programación en PHP y MySQLEspecífico FP Código 10FP32CF148

15 - 15 - BIBLIOGRAFÍABIBLIOGRAFÍA

DIVERSOS AUTORESManual PHP “Oficial”Versión web 17/08/2010 desde RedIris http://docs.php.net/manual/es/Editor principal Philip Olson.Copyright © 1997-2010 por el Grupo de documentación de PHPBajo Licencia http://creativecommons.org/licenses/by/3.0/

- 40 -