Vous êtes sur la page 1sur 40

Curso programacin en PHP y MySQL

Cdigo 10FP32CF148

Bloque II: El Lenguaje PHP Introduccin al Lenguaje


Ponentes: Vicente Martnez Martnez y Juan Jos Guarinos Huesca

CEFIRE Especfico de FP

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

ndice de contenidos
1 - Presentacin de la Sesin.......................................................................................5 2 - Sintaxis Bsica.........................................................................................................6 3 - Comentarios ............................................................................................................7 4 - Instrucciones (Mi primer programa).........................................................................7 4.1 - Variables e Identificadores................................................................................8 4.2 - Operadores........................................................................................................9 4.2.1 - Operadores aritmticos...........................................................................10 4.2.2 - Operadores de asignacin......................................................................10 4.2.3 - Operadores de comparacin...................................................................11 4.2.4 - Operadores lgicos.................................................................................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 supresin o de control de error..........................................14 4.2.9 - Operador de ejecucin............................................................................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 (nmero 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

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

6 - Conversin 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 bsica........................................................................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 - Instruccin if...................................................................................................29 13.2 - Instruccin else..............................................................................................30 13.3 - Instruccin elseif............................................................................................30 13.4 - Estructuras Repetitivas o Bucles...................................................................31 13.4.1 - Nociones Bsicas..................................................................................31 13.4.2 - Bucle while.............................................................................................32 13.4.3 - Bucle dowhile.....................................................................................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 algortmicos bsicos...........................................................39 14.1 - Contador........................................................................................................39 14.2 - Acumulador (Similar a contador)...................................................................39 14.3 - Switch (interruptor, tambin conocido como flag).........................................39 15 - Bibliografa...........................................................................................................40

-4-

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

1 - PRESENTACIN DE LA SESIN
Al desarrollar estas caractersticas bsicas no pretendemos hacer un manual de referencia de PHP indicado en la bibliografa. Pero si que se recogen las caractersticas 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 bsicas de programacin que se completarn a travs de un apndice en el bloque.
Para aquellos que tengan experiencia programando en lenguajes c omo C, C++, JavaScript, C#, Java, etc... este bloque pueden leerlo de forma rpida y saltar la gran mayora de aspectos bsicos de programacin, sin embargo este material se ha incluido ya que puede ser de utilidad para nuestro alumnado.

-5-

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

2 - SINTAXIS BSICA
Php simplemente interpreta el texto del archivo de cdigo con extensin .php hasta que encuentra uno de los caracteres especiales que delimitan el inicio de cdigo php. <?php cdigo en php ?>

<?php if ($expression) { ?> <b>Cierto.</b> <?php } else { ?> <b>Falso.</b> <?php } ?>

Como vemos en el ejemplo el cdigo php no tiene por que estar en un solo bloque de delimitadores. Todo el cdigo fuera es interpretado tal cual por php. Podremos encontrar cdigo con otros delimitadores, incluso se pueden configurar en el php.ini. Pero si no usamos estos podemos tener problemas al embeber cdigo php dentro de XML o XHTML. Cualquier tipo de espacio en blanco como saltos de lnea, tabuladores y espacio. Son ignorados por php puesto que tambin son ignorados por los navegadores en el cdigo HTML.

-6-

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

3 - COMENTARIOS
Los comentarios del cdigo se podrn realizar usando los siguientes delimitadores De bloque: /* ...comentario */ (Como en C99) De lnea: // ...comentario de una sola lnea. (Como en C99) # ...comentario de una sola lnea. (Como en Shell Script)

Deberemos tener cuidado de no anidar cdigo comentado y de no comentar cdigo fuera de los delimitadores <?php ?>, puesto que no tendrn ningn efecto. Un comentario debe MERECER LA PENA y tiene que indicar de forma clara y concisa qu es lo que hace una seccin del cdigo de un algoritmo, y no cmo lo hace (para eso ya est el propio cdigo).

4 - INSTRUCCIONES (MI PRIMER PROGRAMA)


Las instrucciones en una secuencia, van separadas por el carcter 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 peticin al servidor Apache o ejecutarlo desde un terminal mediante el comando:
$ php primero.php

Dentro de las instrucciones podremos encontrar...

-7-

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

4.1 - Variables e Identificadores


Las variables en php no hace falta declararlas y se representarn por un identificador precedido del smbolo del dlar $ (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, nmeros y guiones bajos (siguiendo siempre un determinado estilo). Aunque deberemos tener en cuenta que: 1 2 3 4 5 Como en otros lenguajes no pueden contener ningn tipo e carcter especial ni operador y evitaremos palabras reservadas como nombre. No pueden comenzar por nmeros. $1valor = 21; El interprete discrimina entre maysculas y minsculas. No es lo mismo $diaSemana (Camel Casing) que $DiaSemana (Pascal Casing) Podemos usar el mismo identificador para una variable y una funcin aunque no es aconsejable . Deben ser significativos, EVITAREMOS CONTRACCIONES en identificadores cortos y REDUNDANCIA dentro de un contexto. Buscaremos pues NOMBRES AUTODOCUMENTADOS. 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 dbilmente tipado como PHP.
INCORRECTO $6Caja $tot $ventlun CORRECTO $Caja6 $TotalUnidadesVendidas $ventasLunes

-8-

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

4.2 - Operadores
En PHP los operadores y la evaluacin 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 evalan a algn valor escalar o cadena. Las que se evalan a un valor booleano de cierto o falso (usan operadores lgicos 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 no-asociativo no-asociativo derecha a izquierda no-asociativos no-asociativos 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 izquierda a derecha izquierda a derecha izquierda a derecha Operadores
() new [] ++ -! ~ - (int) (float) (string) (array) (object) @ * / % + - . << >> < <= > >= == != === !== & ^ | && || ? : = += -= *= /= .= %= &= |= ^= <<= >>= and xor or ,

Por ejemplo 1 + 4 * 5 se evaluar a 21 y no a 25, para evaluarse a 25 deberamos poner parntesis (1 + 4) * 5 Vamos a clasificar estos operadores segn el tipo de operacin...

-9-

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

4.2.1 - Operadores aritmticos


Ejemplo -$a $a + $b $a - $b $a * $b $a / $b $a % $b $a.$b Nombre Negacin Adicin Substraccin Multiplicacin Divisin Mdulo Concatenacin Resultado El opuesto de $a. Suma de $a y $b. Diferencia entre $a y $b. Producto de $a y $b. Cociente de $a y $b. Resto de $a dividido por $b. La cadena $b se concatena a $a.

El operador de divisin '/' devuelve un valor flotante en todos los casos, incluso si los dos operandos son enteros. Con lo cual evitaremos el problema de la divisin 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 asignacin


El operador bsico de asignacin es '=' en el cual el operando de la izquierda recibe el valor de la expresin a la derecha. Por ejemplo $a = ($b = 4) + 5; si analizamos la expresin evaluaremos primero el parntesis $b toma el valor 4 y se evala todo a 4 quedando $a = 4 + 5 con $b = 4. Combinar operadores de asignacin. 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 debera tener un valor asignado previamente. Ejemplo
Evala la expresin $a = -(4 * 4 / 2 - (4 * (8 % 2) + 12)) + 8 / 2 % 2; paso a paso teniendo en cuenta la precedencia de los operadores aritmticos. $a $a $a $a $a $a $a $a $a $a $a = = = = = = = = = = = -(4 * 4 / 2 - (4 * (8 % 2) + 12)) + 8 / 2 % 2; -(4 * 4 / 2 - (4 * 0 + 12)) + 8 / 2 % 2; -(4 * 4 / 2 - (0 + 12)) + 8 / 2 % 2; -(4 * 4 / 2 - 12) + 8 / 2 % 2; -(16 / 2 - 12) + 8 / 2 % 2; -(8 - 12) + 8 / 2 % 2; -(-4) + 8 / 2 % 2; 4 + 8 / 2 % 2; 4 + 4 % 2; 4 + 0; 4;

- 10 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

4.2.3 - Operadores de comparacin.


Los operadores de comparacin, como su nombre indica, permiten comparar dos valores o expresiones evalundose a CIERTO O FALSO. Si compara un entero con una cadena, la cadena es convertida a un nmero. Si compara dos cadenas numricas, ellas son comparadas como enteros. Para ms informacin sobre comparaciones de diferentes tipos consultar manual http://www.php.net/manual/es/language.operators.comparison.php Ejemplo $a == $b $a === $b $a != $b $a <> $b $a !== $b $a $a $a $a < $b > $b <= $b >= $b Nombre Igual Idntico Diferente Diferente No idnticos Menor que Mayor que Menor o igual que Mayor o igual que Resultado TRUE si $a es igual a $b. TRUE si $a es igual a $b, y son del mismo tipo. TRUE si $a no es igual a $b. TRUE si $a no es igual a $b. TRUE si $a no es igual a $b, o si no son del mismo tipo. TRUE si $a es estrictamente menor que $b. TRUE si $a es estrictamente mayor que $b. TRUE si $a es menor o igual que $b. TRUE si $a es mayor o igual que $b.

4.2.4 - Operadores lgicos.


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 tendrn precedencias diferentes (Ver tabla). Ejemplo $a and $b $a or $b $a xor $b ! $a $a && $b $a || $b Nombre Y O O exclusivo (Xor) No Y O Resultado TRUE si tanto $a como $b son TRUE. TRUE si cualquiera de $a o $b es TRUE. TRUE si $a o $b es TRUE, pero no ambos. TRUE si $a no es TRUE. TRUE si tanto $a como $b son TRUE. TRUE si cualquiera de $a o $b es TRUE.

- 11 -

CEFIRE Especfico FP Ejemplo

Programacin en PHP y MySQL Cdigo 10FP32CF148

Evala $a = 4 % 2 > 3 && 3 * 4 / 2 == 5 + 1 || !(6 <= 6) && true; paso a paso teniendo en cuenta la precedencia de los operadores. $a $a $a $a $a $a $a $a $a $a $a $a = = = = = = = = = = = = 4 % 2 > 3 && 3 * 4 / 2 == 5 + 1 || !(6 <= 6) && true; 4 % 2 > 3 && 3 * 4 / 2 == 5 + 1 || !true && true; 4 % 2 > 3 && 3 * 4 / 2 == 5 + 1 || false && true; 0 > 3 && 3 * 4 / 2 == 5 + 1 || false && true; 0 > 3 && 12 / 2 == 5 + 1 || false && true; 0 > 3 && 6 == 5 + 1 || false && true; 0 > 3 && 6 == 6 || false && true; false && 6 == 6 || false && true; false && true || false && true; false || false && true; false || false; 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 parmetros tanto a la izquierda y a la derecha son cadenas, el operador bit a bit trabajar sobre los valores ASCII de los caracteres. Ejemplo $a & $b $a | $b $a ^ $b ~ $a $a << $b $a >> $b Nombre Y O O exclusivo (Xor) No Desplazamiento a izquierda Desplazamiento a derecha Resultado Los bits que estn activos tanto en $a como en $b son activados. Los bits que estn activos ya sea en $a o en $b son activados. Los bits que estn activos en $a o $b, pero no en ambos, son activados. Los bits que estn activos en $a son desactivados, y vice-versa. Desplaza los bits de $a, $b pasos a la izquierda (cada paso quiere decir "multiplicar por dos") Desplaza los bits de $a, $b pasos a la derecha (cada paso quiere decir "dividir por dos")

- 12 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

4.2.6 - Operadores de incremento/decremento.


PHP ofrece soporte de operadores de pre- y post-incremento y decremento. Ejemplo ++$a $a++ --$a $*a-Nombre Pre-incremento Post-incremento Pre-decremento Post-decremento Efecto Incrementa $a en uno, y luego devuelve $a. Devuelve $a, y luego incrementa $a en uno. Decrementa $a en uno, luego devuelve $a. Devuelve $a, luego decrementa $a en uno.

PHP sigue la convencin de Perl cuando trabaja con operaciones aritmticas sobre variables de caracter, y no la convencin 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 -

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

4.2.7 - Operador ternario.


El operador ternrio (Expr1) ? (Expr2) : (Expr3), funciona de la de la misma forma que en C y es similar a la instruccin if-else que veremos ms adelante. Expr1: Se tratar de una condicin y es aconsejable que se evalue a CIERTO o FALSO. Expr2: Ser a lo que se evalue el operador ternrio si la condicin de Expr1 es CIERTA. Expr3: Ser a lo que se evalue el operador ternrio si la condicin de Expr1 es FALSE.

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

Nota: Aunque este operador es muy til y ahorra lneas de cdigo, no conviene usar este operador como sustituto de if-else, ni en expresiones complejas, ya que puede dar lugar a cdigo ofuscado.
$c=($a>0&&$b<=10)?++$a*$b:$a/$b; // Cdigo ofuscado.

4.2.8 - Operador de supresin 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 expresin en PHP, cualquier mensaje de error que pudiera generarse, incluso crtico, a causa de esa expresin ser ignorado. El operador @ trabaja slo 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 divisin por 0. $a = @(70/0); // No se genera ningn aviso. // En ambos casos $a se queda sin asignar.

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

4.2.9 - Operador de ejecucin


Este 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 intrprete de comandos del sistema operativo donde nos encontremos; su salida ser devuelta y podr asignarse a alguna variable. Tendremos una funcin equivalente denominada shell_exec().
$salida = `dir *.*`; echo "<pre>$salida</pre>";

- 14 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

4.2.10 - Operador de tipo


instanceof es el operador de reflexin, 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 explicarn al ver las mismas).

- 15 -

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

5 - TIPOS DE DATOS
Puesto que en php no hace falta declarar variables, se puede decir que php es un lenguaje dbilmente tipado, puesto que es el intrprete 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 - Tipos Escalares


5.1.1 - bolean (booleano)
Se establecer como resultado de asignar literales booleanos TRUE y FALSE o evaluar una expresin 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 prctica 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 podrn ir de -2147483648 a 2147483647. Cualquier valor literal o resultado de una expresin, por encima o debajo de este rango se interpretar como float.
$a $a $a $a = = = = 1234; -123; 0123; 0x1A; // // // // numero decimal un numero negativo numero octal (83 decimal) numero hexadecimal (26 decimal)

5.1.3 - float (nmero 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 precisin comunes a cualquier lenguaje.
$a = .25 + 1.25; $b = 1.2e3; $c = 7E-10;

- 16 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez 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 codificacin 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 ms recomendada ya que ganaremos eficiencia al ser su interpretacin inmediata.
echo 'esta es una cadena simple'; echo 'Tambi&eacute;n puede tener saltos de l&iacute;nea embebidos en las cadenas de esta forma, ya que es 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:\DESTINO echo 'Copie de C:\ORIGEN a C:\\DESTINO'; // Imprime: Esto no va a expandirse: \n una nueva linea echo 'Esto no va a ponerse: \n en una nueva linea'; // Imprime: Las variables no se $expanden $tampoco echo 'Las variables no se $expanden $tampoco se ver tal cual';

Como vemos podremos meter saltos de lnea aunque despus son ignorados y cualquier carcter es interpretado tal cual, salvo los siguientes caracteres de escape vlidos: \' Comilla simple. \\ Barra Invertida. Entre comillas dobles: Permite expandir el contenido de una variable dentro de la cadena.
Algunos autores lo consideran una mala prctica definir literales de cadena entre comillas dobles cuando estas no son necesarias, puesto que tardan ms en interpretarse perdiendo as eficiencia. Adems en ocasiones se har complicado consultar el valor de la variable.

Nos permitirn ampliar el nmero de caracteres de escape vlidos. \n Nueva lnea \r Salto de carro \t Tabulacin \\ Barra invertida \$ Signo dlar \" Comillas dobles \xFF Valor haxadecimal.
$mes = 'septiembre'; // Imprime: Ahora viene un salto de lnea. Ahora expandimos 'septiembre' echo "Ahora hay un salto de lnea.\nAhora expandimos '$mes'"; $valor = 400; // Imprime: Son 400$ Caracter guion bajo _ echo "Son $valor\$ Caracter guion bajo \x5F";

- 17 -

CEFIRE Especfico FP Sintaxis heredoc:

Programacin en PHP y MySQL Cdigo 10FP32CF148

Esta sintaxis viene del lenguaje Perl y nos permite definir cadenas extensas de forma elegante. Tendr la siguiente sintaxis. $texto = <<<marcador linea 1 linea 2 marcador
$valor = 400; /* Imprime: Esto es la primera lnea. El "precio" es de 400$ */ echo <<<FIN Esto es la primera lnea. 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. Adems para que cierre correctamente debe aparecer en la primera columna sin ningn tipo de sangra. Las variables tambin son expandidas como ocurre con las comillas dobles.

- 18 -

El Lenguaje PHP Introduccin al lenguaje. Concatenacin de cadenas

Vicente Martnez Martnez Juan Jos Guarinos Huesca

Como adelanto a la gestin de cadenas, vamos a hablar del operador de concatenacin que es el carcter punto '.'. Este operador nos permitir crear literales de cadena y darles formato junto a variables sin necesidad de expandir sus valores. Si en la expresin de concatenacin ponemos una variable que no es de tipo string, tratar de convertirla a cadena para realizar la concatenacin.
$nombre = 'Juan; echo "Hola $nombre"; // Imprime: Hola Juan echo 'Hola '.$nombre; // Equivalente a lo anterior concatenando.

No se podrn concatenar literales numricos. Expandir expresiones complejas En ciertos casos cuando expandamos variables necesitaremos utilizar las llaves { expresin 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 smbolo 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 ms 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 algn objeto etc como veremos ms adelante.

- 19 -

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

5.2 - Tipos compuestos


5.2.1 - array
Utilizado para almacenar conjunto de datos. (Las trataremos ms adelante).

5.2.2 - object
Utilizado para almacenar instancias de clases. (Las trataremos ms adelante).

5.3 - Tipos especiales


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 ms adelante).

5.3.2 - null
Toman 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 - Pseudo-tipos
Introducidos por razones de legibilidad y aplicados a parmetros de funciones.

5.4.1 - mixed
Indica que un parmetro puede aceptar mltiples tipos (no necesariamente todos).

5.4.2 - number
Indica que un parmetro puede ser integer o float.

- 20 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

6 - CONVERSIN DE TIPOS
Al realizar operaciones entre tipos diferentes se realizar una conversin implcita al tipo de mayor rango. En php tenemos la posibilidad de realizar conversiones explcitas entre tipos. Una forma es utilizando la sintaxis del cast explcito 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. Tambin tendremos la posibilidad de reinterpretar variables, utilizando funciones de utilidad como: int intval ( mixed var [, int base]) double doubleval ( mixed var) string strval ( mixed var) Obtiene una valor entero. Obtiene una valor double. Obtiene una cadena.

7 - VARIABLES DE VARIABLE
PHP nos permite cambiar el nombre de una variable de forma dinmica. 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 cdigo ofuscado.

- 21 -

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

8 - DECLARAR Y UTILIZAR CONSTANTES


Una constante es un valor asignado que no se puede cambiar en ningn otro punto de la secuencia de comandos. Para definirlas utilizaremos la funcin: int define ( string name, mixed value [, int case_insensitive]) Como primer parmetro es el nombre de la constante que ir en maysculas separando las palabras por guin bajo (Misma que para lenguaje C). El segundo parmetro ser el valor de la constante que slo 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 cdigo y evita la aparicin de nmeros mgicos en el mismo. 1. Las constantes no necesitan anteponer el smbolo $ como las variables para ser referenciadas en el cdigo. 2. Las constantes no se pueden expandir en literales de cadena con doble comilla. Disponemos de la funcin array get_defined_constants ( void ) para ver todas las constantes definidas y tambin podemos usar int phpinfo( void ) para visualizar todas las constantes que tenemos ya predefinidas para nuestra configuracin de PHP, segn las extensiones que tengamos cargadas.

- 22 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

9 - PROBAR EL ESTADO DE VARIABLES


PHP dispone de una serie de funciones de utilidad que me permitirn comprobar el estado de las variables y es muy comn encontrarlas en cdigo 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, devolvindome 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 -

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

10 - MBITO DE VARIABLES
El 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 cdigo donde se indica cada uno en la siguiente pgina): 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 funcin y dejan de existir cuando esta finaliza. 4. Las variables estticas locales a funciones tienen restringido su mbito a la funcin 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 continuacin profundizaremos en algunas de ellas a lo largo del curso. a. $GLOBALS Matriz con todas las variables globales, puede servirnos para acceder a una variable global dentro de una funcin sin tener que declararla como global local a funcin. b. $_SERVER Matriz con variables definidas por el servidor web directamente relacionadas con el entorno en don el script se esta ejecutando. c. $_GET Matriz con variables proporcionadas al script por medio de GET. d. $_POST Matriz con variables proporcionadas al script por medio de POST. e. $_COOKIE Matriz con la variables de cookies. f. $_FILES Matriz con variables relacionadas con la carga de archivos. g. $_ENV Matriz con variables de entorno.

- 24 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

h. $_REQUEST Matriz 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. $_SESSION Matriz con las variables registradas en la sesin 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 // Definicin constante define('CONSTANTE',3.1416); // Variables globales $globalA = 100; $globalB = 200; // Funcin prueba function Prueba() { // Accederemos a la variable global globalA. global $globalA; // Variable local su desaparece al terminar la funcin // se le asigna el valor 300 en cada llamada. $localA = 300; // Variable local esttica su valor permanece al terminar la // funcin. Slo se asigna el valor 400 en la primera llamada. static $localB = 400; $localA++; $localB++; // Acceso echo echo echo echo echo echo echo } desde el mbito de la funcin. 'Dentro del mbito de la funcin prueba<br>'; "globalA = $globalA<br>"; // Vlido caso 5 "globalB = $globalB<br>"; // Invlido caso 2 "sglobalB = {$GLOBALS['globalB']}<br>"; // Vlido caso 6 "localA = $localA<br>"; // Vlido caso 3 "localB = $localB<br>"; // Vlido caso 4 'CONSTANTE = '.CONSTANTE.'<br>'; // Vlido 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>"; // Vlido caso 2 echo "globalB = $globalB<br>"; // Vlido caso 2 echo "sglobalB = {$GLOBALS['globalB']}<br>"; // Vlido caso 6 echo "localA = $localA<br>"; // Invlido caso 3 echo "localB = $localB<br>"; // Invlido caso 4 echo 'CONSTANTE = '.CONSTANTE.'<br>'; // Vlido caso 1 ?>

- 25 -

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

11 - ENTRADA Y SALIDA DE DATOS BSICA


Esta parte es solo introductoria y ser ampliada ms adelante. Se ha incluido aqu por si queremos realizar algn script sencillo de prueba para las estructuras bsicas de control que se tratarn a continuacin.

11.1 - Salida
Ya hemos visto durante la explicacin 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 tambin para scripts ejecutados desde un terminal.

11.2 - Entrada 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 cdigo similar al que se muestra a continuacin.
<?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 despus de introducirlos. echo "El dato1 es $dato1"; echo "El dato2 es $dato2"; fclose($stdin); ?>

La instruccin $dato1 = trim(fgets($stdin, 1000)); parar la ejecucin del script hasta que el usuario introduzca algo por el terminal y pulse retorno de carro, momento en el cual continuar la ejecucin y la variable $dato1 tomar el valor introducido. El tipo de la variable $dato1 ser asignado segn lo que introduzcamos.

- 26 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

11.2.1 - Entrada desde un navegador


Para poder empezar a trabajar vamos a dar una mnima introduccin que ampliaremos posteriormente, para ello, podemos decir que la forma ms sencilla de pasar datos de entrada a un script de php desde un cliente web es a travs del QUERY_STRING que tendr un forma del tipo:
http://localhost/script.php?dato1=valor1&dato2=valor2&dato3=valor3

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

Fijmonos que tras el nombre del fichero o script que vamos a ejecutar se pone el carcter ? y tras el los diferentes datos que queremos pasarle al script separados por el carcter &. En el script podremos acceder al valor del nombre a travs 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 travs de un formulario tendremos que utilizar un cdigo similar al siguiente:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head></head> <body> <?php if (isset($_GET['aceptar'])===true) { // Aqu aadiremos las lneas de cdigo 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 aadiremos ms datos entrada de forma anloga --> <input name="aceptar" value="Aceptar" type="submit"> </form> <?php } ?> </body> </html>

script.php El resultado de visualizar el script anterior desde un navegador ser:

- 27 -

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 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 direccin se genera un QUERY_STRING con los datos introducidos tal y como hemos descrito. La desventaja de este mtodo frente a la introduccin en la ejecucin desde el terminal es que los datos se deben meter todos de una vez y de forma previa a la ejecucin.

- 28 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

12 - BLOQUES DE INSTRUCCIONES
Llamaremos bloque de instrucciones al conjunto de varias instrucciones seguidas delimitadas entre dos llaves. Ejemplo
{ echo 'Hola '; echo 'caracola'; }

13 - ESTRUCTURAS DE CONTROL
Permiten controlar el flujo de ejecucin de sentencias y se pueden agrupar en condicionales (o de bifurcacin) y en estructuras de repeticin o bucles. Los programadores de lenguaje C no tendrn ningn problema pues son muy similares a las de dicho lenguaje.
Como nomenclatura cuando nos refiramos a sentencia haremos referencia a una asignacin, una llamada a funcin, un bucle, una sentencia condicional e incluso una sentencia que no haga nada (una sentencia vaca). Adems, 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 - Instruccin if
if (expresin) sentencia; if (expresin) { bloque; }

Permite la ejecucin condicional de fragmentos de cdigo. expresin se evala a su valor condicional (boolean). Si Expr se evala como TRUE, PHP ejecutar la sentencia o bloque de sentencias, y si se evala 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 cdigo de ejemplo $dato no contiene un valor booleano puesto que se inicializa a un valor aleatorio. Sin embargo al usar == la expresin se evaluar a cierto. Hubiese dado igual poner if ($dato) Esto puede ser fuente de errores, por tanto en PHP utilizaremos el operador ===. - 29 -

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

13.2 - Instruccin else


if (expresin) sentencia_1; else sentencia_2; if (expresin) { bloque_1; } else { bloque_2; }

A menudo queremos ejecutar una sentencia si se cumple una cierta condicin, y una sentencia distinta si la condicin no se cumple. Esto es para lo que sirve else. else extiende una sentencia if para ejecutar una sentencia en caso de que la expresin en la sentencia if se evale como FALSE.

13.3 - Instruccin elseif


if (expresin) Sentencia o Bloque elseif (expresin) Sentencia o Bloque else Sentencia o Bloque

elseif, como su nombre sugiere, es una combinacin de if y else. Como else, extiende una sentencia if para ejecutar una sentencia diferente en caso de que la expresin if original se evala como FALSE. No obstante, a diferencia de else, ejecutar esa expresin alternativa solamente si la expresin condicional elseif se evala como TRUE. Ejemplo
Se nos pide hacer un script de terminal en php que lea dos valores numricos X e Y, determine si son iguales y, en caso de no serlo, indique cul de ellos es el mayor.

Solucin
<?php $stdin = fopen('php://stdin', 'r'); echo $X = echo $Y = 'X? '; trim(fgets($stdin,1000)); 'Y? '; trim(fgets($stdin,1000)); == $Y) 'Son iguales'; ($X > $Y) 'X es mayor que Y'; 'Y es mayor que X';

if ($X echo elseif echo else echo

fclose($stdin); ?>

- 30 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

13.4 - Estructuras Repetitivas o Bucles


13.4.1 - Nociones Bsicas
Repeticin de una secuencia de instrucciones (iteracin) en funcin de una condicin de continuacin o de finalizacin. El cuerpo de un bucle son las instrucciones incluidas dentro del mismo. Una ITERACIN es la ejecucin del cuerpo del bucle Tipos de estructuras repetitivas: Repeticin con condicin inicial

verdadero

condicin

falso

Repeticin con condicin final

verdadero

condicin

falso

Repeticin con condicin con contador Diseo 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 -

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

13.4.2 - Bucle while


while (expresin) sentencia; while (expresin) { bloque; }

Le dice a PHP que ejecute la(s) sentencia(s) repetidamente, mientras la expresin while se evale como TRUE. El valor de la expresin es comprobado cada vez al principio del bucle, as pues en alguna iteracin (cada vez que PHP ejecuta las sentencias en el bucle es una iteracin) del bucle deberemos cambiar los valores de expresin para que se evalu a FALSE, de lo contrario entraramos en un bucle infinito.1 Ejemplo
Veamos el siguiente ejemplo que genera cdigo HTML para visualizar una tabla de pares hasta el nmero 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 ms de una estructura de seleccin como en el resto de lenguajes estructurados.

1Ver Anexo I - 32 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

13.4.3 - Bucle dowhile


do sentencia; while (expresin); do { bloque; } while (expresin);

Los bucles dowhile son muy similares a los bucles while, excepto que las condiciones se comprueban al final de cada iteracin en vez de al principio. La principal diferencia frente a los bucles regulares while es que se garantiza la ejecucin de la primera iteracin. Ejemplo
Veamos el siguiente ejemplo que genera cdigo HTML para visualizar una tabla de pares hasta el nmero 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 -

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

13.4.4 - Bucle for


for (expresin1; expresin2; expresin3) sentencia; for (expresin1; expresin2; expresin3) { bloque }

Equivale a una estructura del tipo:


expresion1; while ( expresion2 ) { bloque expresion3; }

La primera expresin (expresin1) se evala (ejecuta) incondicionalmente una vez al principio del bucle. Al comienzo de cada iteracin, se evala expresin2. Si se evala como TRUE, el bucle contina y las sentencias anidadas se ejecutan. Si se evala como FALSE, la ejecucin del bucle finaliza. Al final de cada iteracin, se evala (ejecuta) expresin3. Ejemplo
Veamos el siguiente ejemplo que genera cdigo HTML para visualizar una tabla de pares hasta el nmero 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 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez 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 expresin2, se le supone valor verdadero siempre, formndose 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 -

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

13.4.6 - break
Se utiliza: Para forzar la salida inmediata de un bucle, saltando la evaluacin condicional normal. Para terminar una clusula "case" de sentencia "switch" y finalizar su ejecucin. Ejemplo
Programa que va calculando la raz cuadrada de un nmero introducido, mientras este no sea negativo.
<?php $stdin = fopen('php://stdin', 'r'); while (true) { echo 'Introduce un nmero entero? '; $numero = trim(fgets($stdin,1000)); if ($numero < 0.0) break; $raiz = sqrt($numero); echo "La raz cuadrada de $numero es $raiz"; } fclose($stdin); ?>

No conviene abusar de esta instruccin pues en ocasiones puede hacer que nos dejemos algn 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 iteracin actual del bucle y continuar la ejecucin al comienzo de la siguiente iteracin. continue accepta un parmetro opcional, el cual determina cuantos niveles (bluces) hay que saltar antes de continuar con la ejecucin.

Ejemplo
Programa que le 10 nmeros y los va mostrando si no coincide el nmero 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 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

13.5 - Condicional switch


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

La sentencia switch es similar a una serie de sentencias if en la misma expresin. En muchas ocasiones, se quiere comparar la misma variable (o expresin) con muchos valores diferentes, y ejecutar una parte de cdigo distinta dependiendo de a qu valor es igual. Su sintaxis ms comn en como se muestra en el recuadro donde expresin se evaluar a un tipo nico simple entero, double, cadena etc y literal1, literal2 son literales de ese tipo. default se ejecutar si expresin. No coincide con ninguno de los valores. Es importante entender cmo se ejecuta la sentencia switch para evitar errores. La sentencia switch ejecuta lnea por lnea, cuando se encuentra una sentencia case con un valor que coincide con el valor de la expresin switch PHP comienza a ejecutar las sentencias. PHP contina 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 caracterstica se puede utilizar para agrupar varios casos con un mismo grupo de sentencias, pero tambin puede dar lugar al llamado falltrought que trataremos de evitar pues es fuente de errores. paso 1: Se evala la "expresin" paso 2: Se ejecuta la clasula "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 ejecucin de "switch". paso 3: Termina cuando se encuentra una sentencia "break" esta es obligatoria para evitar cadas al vaco. (fall through )

2 Tener en cuenta que al contrario que otros lenguajes de programacin, 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 podra usar continue 2.

- 37 -

CEFIRE Especfico FP Ejemplo

Programacin en PHP y MySQL Cdigo 10FP32CF148

Veamos un sencillo ejemplo en el que vamos a asignar a una variable $presupuesto el presupuesto de un departamento para una ao. Teniendo en cuenta que el departamento de matemticas tiene asignados 200, los de lengua francs 500 y el de informtica 100.
$departamento = 'INFORMATICA'; switch ($departamento) { case 'MATEMATICAS': $presupuesto = 200; // falltrought. Seguir ejecutando y // sobrescribir 200 con el valor 500. case 'LENGUA': case 'FRANCES': // agrupacin $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 -

El Lenguaje PHP Introduccin al lenguaje.

Vicente Martnez Martnez Juan Jos Guarinos Huesca

14 - ANEXO I - ESQUEMAS ALGORTMICOS BSICOS


14.1 - Contador
Una variable, normalmente de un tipo numrico, 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 expresin del tipo $idContador = $idContador VALOR_FIJO Ej: $nivel = $nivel + 2 $vidas = $vidas 1 $tamanyo = $tamanyo * 2 Ejemplo prctico
Introducir las notas de matemticas obtenidas por los 5 alumnos de una clase y contar cuntos de ellos han aprobado. Necesitaremos 2 contadores uno para alumnos y otro para aprobados.

($nivel += 2) ($vidas--) ($tamanyo *= 2)

14.2 - Acumulador (Similar a contador)


Una variable, normalmente de un tipo numrico, 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 expresin del tipo idAcumulador = idAcomulador VALOR_VARIABLE Ej: totalFactura = totalFactura + lineaFactura Ejemplo prctico
Hallar la suma de los 100 primeros nmeros naturales. Necesitaremos 1 contador para los nmeros y otro para la suma.

14.3 - Switch (interruptor, tambin 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 situacin se haya producido, se le modifica dicho valor. Despus, en otro punto del programa, al preguntar por su estado (su valor), se puede detectar si dicha situacin ha ocurrido o no.

Ejemplo prctico
Sumar por un lado los nmeros impares y por otro los nmeros pares comprendidos entre 1 y 100 usando

- 39 -

CEFIRE Especfico FP

Programacin en PHP y MySQL Cdigo 10FP32CF148

15 - BIBLIOGRAFA
DIVERSOS AUTORES Manual PHP Oficial Versin web 17/08/2010 desde RedIris http://docs.php.net/manual/es/ Editor principal Philip Olson. Copyright 1997-2010 por el Grupo de documentacin de PHP Bajo Licencia http://creativecommons.org/licenses/by/3.0/

- 40 -

Vous aimerez peut-être aussi