Está en la página 1de 51

1

Introduccin a PHP Los ltimos aos han sido fantsticos en trminos del explosivo crecimiento de Internet y las nuevas formas mediante las cuales se hace posible la comunicacin con otras personas. Un ejemplo claro es el gran nmero de sitios web creados y publicados cada da en el Word Wide Web con contenidos cada vez ms dinmicos, lo que atrae ms y ms usuarios. Con el crecimiento de este mercado ha nacido una gran necesidad de uso de nuevas tecnologas y ha llevado a los desarrolladores a aprender a utilizar y aprovechar al mximo esas tecnologas. Una de esas tecnologas es el lenguaje PHP, acerca del cual hablaremos en este captulo: un poco de su historia y capacidades, adems informacin bsica para iniciar desarrollo de sitios dinmicos. Al finalizar este captulo, tendremos claros algunos de los aspectos ms importantes del lenguaje PHP. Un poco de historia PHP nace en 1995, ao del Seor, cuando un desarrollador independiente de software llamado Rasmus Lerdorf cre un script desarrollado en PHP y CGI que le permita conocer cuantos visitantes accedan a una pgina web en la cual haba publicado su hoja de vida. Su script realizaba dos trabajos: capturaba informacin del visitante y mostraba el nmero de visitantes a su pgina. Debemos tener en cuenta que Internet no era an como la conocemos hoy y herramientas como esa simplemente no existan, lo cual propici el envo de una gran cantidad de email de personas solicitando sus scripts. Lerdorf empez entonces a difundir su herramienta de desarrollo a la cual llam Personal Home Page (PHP). El uso de PHP se fue difundiendo de tal manera que Lerdorf pronto a desarrollarle adiciones, una de las cuales fue convertir datos ingresados desde un formulario HTML en variables simblicas que permitieran ser exportadas a otros sistemas. Para lograr esto, opt por continuar el desarrollo de su herramienta en lenguaje C en lugar de Perl. Esta adicin al PHP existente result en el nacimiento de la versin PHP 2.0, o PHP-FI (Personal Home PageForm Interpreter). Esta versin 2.0 permiti a los desarrolladores trabajar con un lenguaje de programacin ms amplio y verstil. El nuevo PHP fue extremadamente popular y pronto se formaron comunidades de desarrolladores, los cuales mantuvieron el concepto original de incorporar cdigo PHP directamente en el cdigo HTML y reescribir el intrprete dando vida a PHP 3.0. Por el ao 1997 la versin 3.0 era utilizada por ms de 50,000 usuarios para implementar dinamismo a sus sitios web, y fue en este ao tambin cuando se cambi su nombre Personal Home Page por Hypertext Preprocessor. El desarrollo del intrprete de PHP continu durante los dos aos siguientes con cientos de funciones aadidas y aumento de usuarios y sitios desarrollados.
1

2
En 1999, Netcraft (http://www.netcraft.com) report un estimado bastante conservador acerca del nmero de usuarios en el mundo que usaban PHP. Su cifra que sobrepasaba el 1,000,000 ubic a PHP como uno de los lenguajes de desarrollo de scripts, ms populares en el mundo. En el mismo ao 1999 se anunci el lanzamiento de PHP 4.0. A pesar de su aceptacin, los desarrolladores no vean a PHP como un lenguaje para desarrollar aplicaciones robustas. Se dise entonces un intrprete ms robusto mejor conocido como Zend (http://www.zend.com). Su desarrollo continu rpidamente culminando en mayo 22 de 2000 con la esperada versin PHP 4.0. De acuerdo con Netcraft (http://www.netcraft.com), en una visita realizada a su sitio web en un pasado muy cercano, PHP se encuentra instalado en ms de 4.6 millones de dominios. Ahora con el lanzamiento de PHP 5.0, el futuro de PHP se torna ms brillante. Muchos sitios web empresariales y personales continan utilizndolo como solucin asus necesidades. PHP es un lenguaje de programacin de scripts de lado del servidor (server-side) que permite desarrollar rpida y eficientemente aplicaciones web dinmicas. PHP guarda una cercana semblanza sintctica gramatical con el lenguaje de programacin C, a pesar de que se han integrado funciones de varios lenguajes incluyendo Perl, Java y C++. Muchas de estas funciones incluyen anlisis de expresiones regulares, manejo de arreglos y matrices, metodologa de orientacin a objetos y soporte de bases de datos. PHP puede ser utilizado como herramienta para crear y administrar contenido dinmico para aplicaciones que van ms all de la metodologa tradicional esttica de HTML, sin ser necesariamente orientadas a Internet. Esto significa que PHP puede ser utilizado para desarrollar aplicaciones locales o para Intranets utilizando adems lenguajes como JavaScript, Stylesheets, WML (Wireless Markup Language) y muchos otros. Una de las principales fortalezas de PHP es el hecho de poder ser embebido directamente en cdigo HTML. No es necesario escribir un programa con muchos comandos y su salida se visualiza en un navegador. Su cdigo no es visible para el usuario y existen herramientas que permiten encriptar el cdigo para no permitir visualizarlo en el directorio en que se encuentra en el servidor. HTML y PHP pueden ser usados en un mismo script fcilmente. Podemos, por ejemplo, hacer simplemente lo siguiente: <html> <? print "Hola mundo!"; ?> </html> guardamos el archivo como holamundo.php y Hola mundo! Se mostrar en el navegador al visualizar nuestra pgina web. Lo interesante de esto es que la orden print que se encuentra entre (<??>) es un programa completo. No necesitamos inclusion de libreras ni largas lneas de cdigo como prefacio a la orden, de tal forma que podramos eliminar la primera y la ltima lneas, guardarlo de nuevo y funciona. <? print "Hola mundo!"; ?>
2

3
Por supuesto, para ejecutar un script PHP, primero debemos instalar y configurar el software PHP en nuestro servidor. Caractersticas de PHP PHP brinda al programador las herramientas necesarias para realizar su trabajo de forma rpida y eficiente. Cinco importantes caractersticas hacen a PHP un lenguaje verstil y robusto: Simplicidad Eficiencia Seguridad Flexibilidad y una caracterstica final hace que PHP sea particularmente interesante: es gratis! Simplicidad Un script PHP puede consistir de 10,000 lneas o una sola: justo las que usted necesite para realizar su trabajo. No hay necesidad de incluir libreras ni directivas especiales de compilacin. El intrprete de PHP simplemente inicia la ejecucin del cdigo que encuentre despus de secuencia de escape (<?) y contina hasta encontrar la secuencia de finalizacin (?>). Si el cdigo es sintcticamente correcto, se ejecutar exactamente como se digit. Eficiencia Eficiencia es una consideracin extremadamente importante cuando se trabaja en un entorno multiusuario como la WWW. PHP 4.0 introdujo nuevos recursos y soporte para programacin orientada a objetos, en adicin a manejo de sesiones. De igual forma, se han introducido mejoras que eliminan innecesarias llamados a posiciones de memoria. Seguridad PHP brinda a los programadores y administradores un eficiente conjunto de herramientas para seguridad dividas en dos marcos de referencia: a nivel de sistema y a nivel de aplicacin. Seguridad a nivel de Sistema PHP ofrece un nmero de mecanismos de seguridad que los administradores pueden manipular, obteniendo un mximo de libertad y seguridad cuando PHP se encuentra configurado propiamente. PHP puede ser ejecutado en lo que se conoce como safe mode (modo seguro), el cual puede limitar los intentos de usuarios para modificar la implementacin en muchas formas importantes. Estos lmites pueden ser implementados para controlar tiempo mximo de ejecucin y uso de memoria, lo cual, si no se controla puede generar efectos adversos en el rendimiento del servidor. Seguridad a nivel de Sistema Algunas opciones de encripcin de datos son soportadas en funciones predefinidas de PHP. Otra ventaja es que el cdigo fuente no es visible a travs del navegador ya que el script es analizado completamente antes de ser enviado al usuario que lo solicit. Flexibilidad
3

4
Ya que PHP es un lenguaje embebido, es extremadamente flexible frente a las necesidades del desarrollador. A pesar de que usualmente es usado solo con HTML, puede ser integrado con lenguajes como JavaScript, WML, XML, y muchos otros. Adicionalmente, el diseo y desarrollo de una aplicacin bien planeados puede hacerla fcilmente distribuible. La dependencia de un navegador no constituye un gran problema ya que los scripts son compilados completamente en el servidor que los aloja antes de ser enviados al usuario. Esto permite que los sripts PHP sean enviados a cualquier dispositivo que contenga un navegador web, incluyendo algunos telfonos celulares, dispositivos personal digital assistant (PDA) y otros sin mencionar el tradicional PC. Ya que PHP no contiene cdigo especfico de ningn servidor, los programadores no se encuentran limitados a determinado servidor web. Apache, Microsoft IIs, Netscape Enterprise Server, Stronghold, Zeus; todos pueden ser usados para llevar a cabo integracin de PHP en ellos. En cuanto a plataformas, PHP es independiente y se encuentra disponible para plataformas como UNIX, Linux, Solaris, FreeBSD, Y Windows 95/98/Millenium/XP/NT/2000/2003. Libre La estrategia de desarrollo open source ha obtenido una considerable notoriedad en la industria de software. El prospecto de liberar cdigo fuente ha arrojado resultados positivos para muchos proyectos. Cabe anotar que Linux y Apache han sido grandes contribuyentes a los ideales del open source. De igual forma, la contribucin no remunerada al desarrollo del intrprete PHP por parte de usuarios en el mundo entero ha sido un factor decisivo el proyecto PHP. Adicionalmente, una extremadamente receptiva comunidad de usuarios proporciona respuestas hasta a las ms ridas preguntas sobre programacin y soporte de PHP en populares grupos de discusin. Y todo sin costo!. Combinando HTML y PHP Primero lo primero: Cmo es analizado el cdigo PHP Bueno, partamos de que ya tenemos un archivo (creado mediante un editor de texto cualquiera), y en ese archivo se tiene algunas lneas de cdigo html y otra(s) con cdigo PHP. Pues bien, lo primero que debemos tener en cuenta es que el archivo debe tener extensin .php, por ejemplo, supongamos que nuestro archivo se llamar holamundo, entonces lo guardaremos como holamundo.php Ok, entonces de esta forma es analizado el archivo: 1. el navegador web (browser para los entendidos) solicita un documento con extensin .php 2. el servidor web dice, hey! un navegador est solicitndome un archivo PHP y enva la solicitud al analizador PHP (PHP parser otra vez para los entendidos). 3. el analizador PHP encuentra el archivo solicitado y busca cdigo PHP en l. 4. cuando encuentra cdigo PHP, lo ejecuta y pone el resultado (si lo hay) en el lugar del archivo en que se encuentra el cdigo. 5. este nuevo archivo de salida (con el resultado obtenido al ejecutar el cdigo) es enviado al servidor web 6. el servidor web lo enva al navegador 7. el navegador muestra el resultado en pantalla Ya que el cdigo PHP es analizado por el servidor, este mtodo de ejecucin de cdigo es llamado server-side. Cuando un cdigo es ejecutado por el navegador, como en el caso de javascript, se le conoce como client-side.
4

5
Para poder combinar cdigo PHP con HTML, el cdigo PHP debe separase del cdigo HTML. Para esto debemos utilizar tags PHP de inicio y finalizacin. Tags de inicio y finalizacin de PHP PHP reconoce unos pocos tipos de tags de inicio y finalizacin y tratar de ejecutar cualquier cosa que se encuentre entre estos tags, de tal forma que, para evitar errores, debemos poner especial atencin al digitar. PHP admite bsicamente tres tipos de tags para indicar y finalizar cdigo. Cualquiera es vlido. Cual usar? Depende del programador: Tag de inicio <?php <? </script language=php> Tag de finalizacin ?> ?> </script>

Tabla 1.1 Tags de inicio y finalizacin de PHP Ahora, como ejemplo, utilizaremos los tres tipos de tags en un script que se ejecutar sin errores. Abrimos un nuevo archivo en nuestro editor preferido Digitamos el siguiente cdigo: <?php echo Esta es una prueba en la cual usamos el primer tipo de tag de inicio y finalizacin de cdigo php; ?> ahora digitamos: <? echo Esta es una prueba en la cual usamos el segundo tipo de tag de inicio y finalizacin de cdigo php; ?> y por ltimo digitamos: <script language=php> echo Esta es una prueba en la cual usamos el tercer tipo de tag de inicio y finalizacin de cdigo php; </script> Guardamos el archivo en el directorio de nuestro servidor web que almacenar nuestros archivos a publicar en la web. Lo guardamos con el nombre phptags.php Abrimos nuestro navegador y digitamos en la barra de direccin
5

6
http://127.0.0.1/phptags.php nota: al ejecutar los ejemplos dados a lo largo de estas lecciones, si usted est utilizando un servidor web externo, reemplace en la barra de direccin de su navegador la direccin http://127.0.0.1 por el nombre del dominio que usted use. Cohabitacin de cdigos En el ejemplo anterior, nuestro archivo consista en tres fragmentos de cdigo PHP, cada uno de los cuales imprima en pantalla un texto. En esta seccin, crearemos un script que contenga un fragmento de cdigo embebido en cdigo HTML y aprenderemos como estos dos tipos de cdigo pueden coexistir pacficamente. Creamos un archivo nuevo en nuestro editor de texto preferido. Digitamos el siguiente cdigo HTML: <html> <head> <title>Mi primer script PHP</title> </head> <body> Ahora insertamos cdigo PHP: <? echo <P>Hola mundo!, este es mi primer script PHP</P>; ?> cerramos los tags HTML </body> </html> Guardamos el archivo en el directorio de nuestro servidor web que almacenar nuestros archivos a publicar en la web. Lo guardamos con el nombre: primerscript.php Abrimos nuestro navegador y digitamos en la barra de direccin: http://127.0.0.1/primerscript.php Solicitamos al navegador que nos muestre el cdigo fuente y podemos verificar que solo nos muestra el cdigo HTML y oculta el cdigo PHP Analicemos el cdigo anterior. Contiene tres elementos: el comando echo, la cadena <P>Hola mundo!, este es mi primer script PHP</P> y el terminador de instruccin ( ; ). Debemos familiarizarnos con la instruccin echo ya que es una de las instrucciones ms usadas en la programacin con PHP. Esta instruccin es utilizada para visualizar informacin en pantalla. En este ejemplo se utiliz para mostrar en el navegador la cadena Hola mundo!, este es mi primer script PHP.
6

7
GENERALIDADES DE CODIGO Funciones de salida echo() La sintaxis de echo es la siguiente: echo cadena a visualizar ejemplo: echo esto es una prueba; Notemos que si deseamos incluir cdigo HTML dentro de cdigo PHP para realzar textos (mediante la instruccin echo) como en el caso de uso de negrillas, cursivas, tamaos de texto, retornos de carro, etc., estos tags deben ir dentro de las comillas. Podemos incluir en nuestra instruccin echo el valor de una variable (aunque el tema de variables ser tratado un poco ms adelante) utilizando una coma, de la siguiente forma: echo el valor de la variable es: ,$variable; Esto imprimir el texto que se encuentra entre comillas y enseguida imprimir el valor de la variable $variable. echo el valor de la variable es: <br>,$variable; Esto imprimir el texto que se encuentra entre comillas, har un retorno de carro e imprimir el valor de la variable $variable. Este es un ejemplo de cdigo: $a=87; $b="Carlos"; $c="<br>"; echo $a,$b,25,"Juan",$c; que producira esta salida: 87Carlos43Juan La funcin echo aunque admite la sintaxis echo() (ejemplo: echo (texto); ) no requiere que su contenido vaya entre parntesis. print() La funcin print() debe contener dentro del parntesis una sola variable, cadena o nmero. Ejemplos: <? print (6.9); // mostrara en pantalla: 6.9 ?> <? print("Federico"); // mostrara en pantalla: Federico ?>
7

8
<? $pi=3.1416; print("$pi"); // mostrara en pantalla: 3.1416 ?> La importancia del finalizador de instrucciones El finalizador de instrucciones (;) es absolutamente requerido al final de cada instruccin. Su funcin es informarle a PHP que ha finalizado dicha instruccin y debe seguir con la siguiente. Si no se finalizan las instrucciones con ( ; ) el analizador de PHP se confundir y el cdigo generar errores. Tomemos de nuevo nuestro cdigo de ejemplo, pero ahora hagamos que cometa un error. <html> <head> <title>Mi primer script PHP</title> </head> <body> <? echo <P>Hola mundo!, este es mi primer script PHP</P> echo <P> <h1><font color='#FF0000'> y en la lnea anterior comet un error! </h1></P>; ?> </body> </html> ejemplo 3.- error por falta de finalizador de instruccin Notemos que al ejecutar el script, nos presenta el siguiente error: Parse error: parse error, unexpected T_ECHO, expecting ',' or ';' in primerscript.php on line 7 Debemos aprender a interpretar los mensajes de error que nos presenta el intrprete de PHP. Los errores parse, como el del ejemplo son errores de anlisis y nos indican la lnea en que se produjo. Esta caracterstica es muy til y nos permite solucionar problemas fcilmente. Antes de continuar, aclaremos un concepto que ya utilizamos y utilizaremos constantemente en nuestra programacin con PHP: Cadenas Una de las variables ms corrientes a las que tendremos que hacer frente en la mayora de nuestros scripts son las cadenas, que no son ms que informacin de carcter no numrico (textos, por ejemplo).

9
Para asignar a una variable un contenido de este tipo, lo escribiremos entre comillas dando lugar a declaraciones de este tipo: $cadena= "Esta es la informacin de mi variable" ; Si queremos ver en pantalla el valor de una variable o bien un mensaje cualquiera usaremos la instruccin echo como ya lo hemos visto anteriormente: echo $cadena; Podemos yuxtaponer o concatenar varias cadenas poniendo para ello un punto entre ellas: <? $cadena1="Perro"; $cadena2=" muerde"; $cadena3=$cadena1.$cadena2; echo $cadena3; // El resultado es: "Perro muerde" ?> Podemos adems concatenar varias cadenas con texto de la siguiente forma: echo Yo tengo un perro llamado .$nombre_perro. y tiene .$edad_perro. aos; Ojo, abrimos comillas, cerramos comillas, ponemos la variable con un punto ( . ) antes y uno despus y abrimos y cerramos comillas de nuevo. Tambin podemos introducir variables dentro de nuestra cadena lo cual nos puede ayudar mucho en el desarrollo de nuestros scripts. Lo que veremos no es el nombre, sino el valor de la variable: <? $a=55; $mensaje="Tengo $a aos"; echo $mensaje //El resultado es: "Tengo 55 aos" ?> La pregunta que nos podemos plantear ahora es...Cmo hago entonces para que en vez del valor "55" me salga el texto "$a"? En otras palabras, cmo se hace para que el smbolo $ no defina una variable sino que sea tomado tal cual. Esta pregunta es tanto ms interesante cuanto que en algunos de scripts este smbolo debe ser utilizado por una simple razn comercial (pago en dlares por ejemplo) y si lo escribimos tal cual, el ordenador va a pensar que lo que viene detrs es una variable siendo que no lo es. Pues bien, para meter ste y otros caracteres utilizados por el lenguaje dentro de las cadenas y no confundirlos, lo que hay que hacer es escribir una barra invertida (backslash) delante: Carcter \$ \" \\ \8/2 Efecto en la cadena Escribe signo pesos ($) en la cadena Escribe comillas en la cadena Escribe barra invertida (backslash) en la cadena Escribe 8/2 (no el resultado de la divisin) en la cadena
9

10
Adems, existen otras utilidades de esta barra invertida (backslash) que nos permiten introducir en nuestro documento HTML determinados eventos: Carcter \t \n \r Efecto en la cadena Introduce una tabulacin en nuestro texto Cambiamos de lnea Retorno de carro

Estos cambios de lnea y tabulaciones tienen nicamente efecto en el cdigo y no en el texto ejecutado por el navegador. En otras palabras, si queremos que nuestro texto ejecutado cambie de lnea hemos de introducir un echo "<br>" y no echo "\n" ya que este ultimo slo cambia de lnea en el archivo HTML creado y enviado al navegador cuando la pgina es ejecutada en el servidor. La diferencia entre estos dos elementos puede ser fcilmente comprendida mirando el cdigo fuente producido al ejecutar este script: <HTML> <HEAD> <TITLE>cambiolinea.php</TITLE> </HEAD> <BODY> <? echo "Hola, \n sigo en la misma lnea ejecutada pero no en cdigo fuente.<br>Ahora cambio de lnea ejecutada pero continuo en la misma en el cdigo fuente." ?> </BODY> </HTML> Las cadenas pueden asimismo ser tratadas por medio de funciones de todo tipo. Veremos estas funciones ms adelante con ms detalle. Tan slo debemos retener que existen muchas posibles acciones que podemos realizar sobre ellas: Dividirlas en palabras, eliminar espacios sobrantes, localizar secuencias, remplazar caracteres especiales por su correspondiente en HTML o incluso extraer las etiquetas META de una pgina web. El uso de comillas En los cdigos de ejemplo hemos utilizado la instruccin echo y hemos observado que su sintaxis indica que a continuacin de la palabra reservada echo se abren comillas dobles y la cadena que se digite a continuacin se visualizar en el navegador (interpretando cdigo HTML si se incluye). Debemos recordar que para indicar el fin de la cadena a visualizar, se deben cerrar las comillas dobles. Nota: es vlido, si se desea, el uso de comillas sencillas ( ' ' ) en lugar de las dobles. Pero qu sucede si se presenta la necesidad de usar comillas dentro de comillas?. Veamos el siguiente ejemplo: <? echo "es vlido el uso de comillas (" ") dentro de comillas?"; ?>
10

11
ejemplo 4. comillas dentro de comillas (comillas.php) la ejecucin de este script nos generar el siguiente mensaje de error: Parse error: parse error, unexpected T_STRING, expecting ',' or ';' in comillas.php on line 2 Este error nos dice que al ejecutar la instruccin echo, se encontr un carcter no esperado e indica lo que normalmente esperara encontrar. Pero en realidad qu ha sucedido? Al ejecutar la instruccin echo, se trat de visualizar la cadena incluida entre las comillas dobles. Para esto, el analizador de PHP busc las primeras comillas, luego la cadena y por ltimo las comillas al final de la cadena. Acto seguido, el analizador busca una continuacin de la instruccin o un finalizador de instruccin. En nuestro ejemplo, se ha encontrado con un juego de comillas que lo han confundido puesto que no logra interpretar lo que sigue a continuacin de las comillas que el considera que estn cerrando la cadena y por esto genera el error. Como solucionamos y/o evitamos estos errores? Tenemos varias formas. Primero recordemos que esta instruccin permite tanto el uso de comillas doble () como sencillas (). Esto nos lleva a la primera solucin. Veamos: <? echo es vlido el uso de comillas (" ") dentro de comillas?; ?> ejemplo 4a. comillas dentro de comillas (comillas.php) en este caso la cadena ha quedado correctamente ubicada entre comillas sencillas y no tiene problemas con las que encuentra entre ellas siempre y cuando estas no sean sencillas. Es decir que el caso contrario es otra posible solucin. Veamos: <? echo es vlido el uso de comillas ( ) dentro de comillas?; ?> ejemplo 4a. comillas dentro de comillas (comillas.php) Otra solucin la brinda el uso de los llamados caracteres de escape o caracteres protegidos. Estos caracteres solo funcionan cuando se utilizan en cadenas con comillas dobles. Comentando nuestro cdigo Comentar un cdigo es un buen hbito para adquirir. Escribir comentarios en nuestros cdigos nos ayuda (y ayuda a quienes lean nuestros cdigos) a comprender la funcin de cada componente del mismo.
11

12
Los comentarios son ignorados por el navegador y no sern visualizados ni ejecutados por el intrprete PHP. Para que el navegador y/o el intrprete PHP comprendan que determinadas partes del cdigo corresponden a comentarios, estos deben escribirse dentro de sus etiquetas correspondientes. Tenemos diferentes formas para insertar comentarios dentro de nuestro cdigo de PHP: Para una lnea: basta colocar // al comienzo de la lnea. Tambin se puede usar el smbolo # al comienzo de la lnea. Para varias lneas: digitamos /* al comienzo de la primera lnea de comentario y */ al final de la ltima. Los comentarios de varias lneas no pueden anidarse. Si los anidamos, PHP nos dar un mensaje de error. Ejemplo: <? // este comentario no se ver en la pgina echo "Esto se leer <BR> "; // Esto no se leera /* este es un comentario de mltiples lneas y no se acabar hasta que no cerremos as.... */ echo "Este es el segundo comentario que se leer<BR>"; # Este es un comentario tipo shell que tampoco se leer # Este obviamente tampoco echo "tercer texto que se leer"; #comentario invisible /* Ojo cuando hagamos /* comentarios de varias lnes como estos */ a PHP no le gustan para nada */ ?> ejemplo 5. comentarios en php recordemos: Las pginas PHP son pginas web normales en las se insertan (o se pueden insertar) etiquetas de PHP Las etiquetas (tags) PHP siempre empiezan por <? y terminan por ?> La instruccin echo seguida de una cadena de texto entre comillas har que PHP escriba en la pgina web resultante lo contenido en esa cadena de texto. Podemos insertar dentro de la cadena de texto que sigue a echo cuantas etiquetas HTML deseemos. Podramos incluso escribir el cdigo completo una pgina web. Cuidado con las comillas!! Las comillas me han planteado algunos problemas por puro descuidado.
12

13
He aprendido que cuando es preciso anidar cadenas se deben utilizar de distinto tipo (dobles ") o (sencillas ') para las exteriores y para las interiores. Siempre debemos guardar nuestros archivos con extensin .php en el directorio reservado para documentos web en nuestro servidor. Generalmente los servidores web tienen instalado sistema operativo Linux o Unix. De acuerdo con esto, es una buena idea no utilizar maysculas ni espacios en los nombres de nuestros archivos para evitar inconvenientes.

VARIABLES Y OPERADORES En el captulo anterior vimos como es el proceso de anlisis del cdigo PHP y como los resultados (textos y mensajes de error) son visualizados en el navegador. En los prximos captulos veremos como reconocer y utilizar variables y operadores. Variables Vamos en orden, aunque es muy seguro que ya estemos familiarizados con el concepto, definamos primero qu es una variable. Una variable es una representacin de un valor particular, como por ejemplo un color de un elemento o un nmero y su caracterstica ms importante es que ese valor puede cambiar en un momento dado. Al trabajar con variables en PHP debemos tener en cuenta lo siguiente: Todos los nombres de variables tienen que empezar por el smbolo $ y a continuacin al menos una letra. Despus de estos dos caracteres podemos utilizar nmeros o letras. Por ejemplo, $a1 es un nombre vlido, pero $1a no es un nombre vlido. Podemos adems utilizar el caracter (_) guin abajo o underscore despus del signo $ para definir el nombre de la variable. Debemos tener en cuenta que adems de letras y nmeros es el nico caracter permitido en la definicin de variables. Ejemplo: $_valor=4.5; Al definir variables es bueno (no obligatorio) utilizar nombres acordes a la funcin que tendr la variable. Por ejemplo, si debemos definir una variable que almacenar un nombre, no sera buena idea llamarla $n sera mejor (por simple orden) llamarla $nombre. PHP diferencia entre maysculas y minsculas. $color es una variable distinta de $Color. Si hacemos referencia a una variable desde dentro de una funcin no nos devolver ningn valor. Para poder utilizar el valor de una variable -previamente definida- dentro de una funcin es preciso escribir dentro de la funcin global nombre de la variable Por ejemplo: global $a1; Si se define una variable dentro de una funcin utilizando el nombre de otra variable que se encuentre definida fuera de la funcin, podemos asignarle a dicha variable un valor diferente, y este ser utilizado nicamente dentro de la funcin. Al salir de la funcin el valor de la variable volver a ser el que se le haba asignado originalmente. La forma de trabajar con variables y funciones la trataremos posteriormente cuando expliquemos el tema de trabajo con funciones.
13

14
A diferencia de otros lenguajes de programacin, en PHP no es necesario definir el tipo de variable, es decir, que el valor de una variable puede ser una cadena de caracteres y luego, la misma variable, puede contener un valor numrico que puede ser operado matemticamente. Las variables pueden ser definidas en cualquier parte del cdigo y ser referenciadas en lugares del script posteriores a su definicin. Para asignar un valor a una variable se escribe el nombre de la variable (sin olvidar el signo $), el smbolo = y su valor. Cuando el valor a asignar a una variable es una cadena (alfanumrico), debe definirse entre comillas. Ejemplo: <? $a=azul ?> (da igual si las comillas a utilizar son dobles o sencillas). Si el valor es numrico, es realmente indiferente si se usan o no las comillas al definirla. No debemos olvidar el finalizador de instruccin (;) al final de la definicin de la variable. Ejemplo: $color=azul32; Es posible utilizar espacios en la definicin de variables alfanumricas ms no en las numricas. Ejemplo: $color=tono azul 32; (vlido). $valor=32 45; (no vlido). Los decimales en las variables que lo requieran, se designan con un punto (.). Ejemplo: $valor=32.5; Los valores exponenciales se designan de la siguiente forma: $valor= 1E+12; Cuando asignamos a una variable un valor numrico comprendido entre - 231 y + 231 PHP la interpreta como tipo Integer. Si el valor numrico de una variable desborda el intervalo anterior -bien por asignacin directa o como resultado de una operacin aritmtica- PHP convierte la variable automticamente en tipo Double. Cualquier variable a la que se le asigne como valor una cadena de caracteres (nmeros y/o letras encerrados por comillas) es interpretada por PHP como tipo String. En la seccin baco encontraremos en detalle la forma de realizar operaciones aritmticas, logartmicas, trigonomtricas, cambios de base, y nmeros grandes. Clases y valores de variables Aunque dijimos que en PHP no era necesario definir el tipo de variable para trabajar con ella, hablaremos de dos clases: Escalares (scalar) y Arreglos (arrays). Las variables escalares contienen un solo valor que puede cambiar. Los arreglos pueden contener una lista de valores u otro arreglo. El tema concerniente a Arreglos se trata ms adelante en profundidad. Por ahora hablaremos de variables escalares. Cuando asignamos un valor a una variable, usualmente asignamos un valor de los siguientes tipos:
14

15
Enteros. Nmeros sin decimales. Por ejemplo: 1354 99556847. es posible utilizar adems notaciones en base octal y en base hexadecimal. Por ejemplo, 017 es la base octal de 15. de tal forma que $a=017; es igual a $a=15; y $b=0x1A3B; (base 16) es igual a $b=6715; (base 10). Nmeros de punto flotante (float o double). Nmeros con decimales. Ejemplo: 1.5, 87.326548, 0.88888992 Cadenas (Strings). Textos y/o informacin numrica, especificada entre comillas dobles ( ) o sencillas (' ').

Al desarrollar un script en PHP, deberamos planear las variables y sus nombres cuidadosamente. Debemos acostumbrarnos a utilizar comentarios en nuestro cdigo para registrar el porqu de cada bloque de cdigo. De igual forma es bueno comentar las lneas que vamos a reemplazar en el caso de realizar cambios de prueba. De esta forma, si cometemos una equivocacin, nuestros propios comentarios nos indicarn los cambios realizados y las lneas originales permanecern intactas. Bueno, creemos ahora un script sencillo que asigne valores a diferentes variables y luego imprima esos valores en pantalla. <? // primero asignamos valores a las tres variables $integer="955421565"; $float="1542.2232235"; $string="Esto es una cadena"; // ahora imprimimos sus valores acompaados por un texto explicativo echo "<P>Valor de variable integer: <b>$integer</b></P>"; echo "<P>Valor de variable float: <b>$float</b></P>"; echo "<P>Valor de variable string: <b>$string</b></P>"; /*
hemos aadido negrillas para resaltar los resultados no podemos olvidar que el cdigo html debemos ubicarlo dentro de las comillas de la orden echo

*/ ?> guardamos con extensin .php, lo llamamos desde nuestro navegador y listo!. Variables Locales y variables Globales Las variables en PHP pueden ser locales o globales, la diferencia estriba en el uso que se va a dar a cada una. Las variables usadas en el script anterior son variables locales. Cuando se desarrolla un script que contenga variables (lo cual es casi siempre), estas variables pueden ser utilizadas solo por ese script. Los scripts no tienen la capacidad
15

16
mgica de leer por si solos el contenido de otros scripts y utilizar las variables que estos contengan. Mediante algunas instrucciones podemos pasar el contenido de variables de un script a otro(s) o hacer que un script llame a otro(s) y utilice sus variables. Esto ltimo lo logramos mediante la creacin de funciones propias (bloques de cdigo reusable que realiza una tarea en particular). En este caso, las variables a usar en las funciones deben definirse como globales, lo cual las habilita para ser utilizadas por otros scripts y funciones cuando sea necesario. Para aprender a crear nuestras propias funciones y utilizar variables globales, el captulo Escribiendo nuestras propias funciones nos ser de gran ayuda. Variables predefinidas En los scripts PHP, se encuentran en uso un conjunto de variables predefinidas. Algunas de estas son tambin llamadas superglobales, lo cual significa esencialmente que siempre estn presentes y disponibles en nuestros scripts. Miremos por ejemplo las siguientes variables superglobales, las cuales sern utilizadas en algunos de nuestros scripts. Cada una de estas variables superglobales son realmente arreglos (arrays) de otras variables. No nos preocupemos ahora por lo complejo que nos pueda parecer este concepto. Lo iremos comprendiendo a travs de las prximas lecciones. Debemos tener en cuenta algo muy importante con estas variables, y es que se deben escribir en maysculas.

$_GET $_POST $_COOKIE $_FILES $_ENV $_SESSION

variables provenientes de un script a travs del mtodo GET variables provenientes de un script a travs del mtodo POST variables provenientes de un script a travs de una cookie variables provenientes de un script para envo de archivos al servidor variables provenientes de un script como parte de entorno del servidor variables registradas en una sesin

es necesario aclarar que si utilizamos una versin de PHP menor a 4.1.X debemos cambiar los nombres de estas variables por las siguientes: $HTTP_GET_VARS $HTTP_POST_VARS $HTTP_COOKIE_VARS $HTTP_POST_FILES $HTTP_ENV_VARS $HTTP_SESSION_VARS

En la tabla siguiente tenemos una lista de variables predefinidas y una corta descripcin de la funcionalidad de cada una de ellas. Debemos tener en cuenta que los resultados variarn dependiendo del servidor al que se est accediendo y de los parmetros de configuracin que tenga.

16

17
Variable
SERVER_NAME

Funcin
Indica el nombre del servidor en el que se est ejecutando el script de PHP

Sintaxis
echo $SERVER_NAME Localhost

Resultado

SERVER_SOFTWARE

Escribe una cadena de identificacin del servidor, que echo $SERVER_SOFTWARE aparece en las cabeceras al responderse a las peticiones Escribe la cadena de peticin (si la hubo) con la que se accedi a la pgina

Apache/1.3.24 (Win32) PHP/4.2.0

QUERY_STRING

echo $QUERY_STRING

DOCUMENT_ROOT

Indica directorio raz del documento bajo el que se ejecuta el script, tal y como echo $DOCUMENT_ROOT est definido en el fichero de configuracin del servidor Indica los tipos MIME que el cliente puede recibir. echo $HTTP_ACCEPT

c:/archivos de programa/easyphp/www

HTTP _ACCEPT

image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* http://localhost/

HTTP _REFERER

La direccin de la pgina (si la hay) desde la que el echo $HTTP_REFERER navegador salt a la pgina actual. Indica el navegador que se est utilizando echo $HTTP_USER_AGENT para ver la pgina actual Indica la direccin IP desde la que el usuario est echo $REMOTE_ADDR viendo la pgina actual Indica el puerto que se est utilizando en la mquina del usuario para comunicarse con el servidor web Indica la va de acceso absoluta del script que se est ejecutando

HTTP_USER_AGENT

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

REMOTE_ADDR

127.0.0.1

REMOTE_PORT

echo $REMOTE_PORT

1041

SCRIPT_FILENAME SERVER_ADMIN

echo $SCRIPT_FILENAME

c:/archivos de programa/easyphp/www/variablespredefinidasm asimportantes.php admin@localhost

El valor que se echo $SERVER_ADMIN haya dado a la directiva SERVER_ADMIN (en Apache) en el fichero de

17

18
configuracin del servidor web. El puerto del equipo servidor que est usando el echo $SERVER_PORT servidor web para la comunicacin. Va de acceso basada en el sistema de ficheros- (no el directorio raz del documento-) del echo $SCRIPT_NAME script en cuestin, despus de que el servidor haya hecho la conversin virtuala-real. El nombre del fichero que contiene el script que se esta ejecutando, relativo al directorio raz de los documentos.

SERVER_PORT

80

SCRIPT_NAME

/variablespredefinidasmasimportantes.php

PHP_SELF

echo $PHP_SELF

/variablespredefinidasmasimportantes.php

Usando constantes Una constante es un identificador para un valor que no puede cambiar durante la ejecucin de un script. Aunque las constantes pueden ser definidas por el usuario, PHP tiene un grupo de constantes predefinidas que estn siempre disponibles para su uso. A diferencia de las variables, las constantes no se definen con un smbolo $ antes de su nombre. Para definir una constante, utilizamos la palabra reservada define. La sintaxis es la siguiente: define(NOMBRE_DE_LA_CONSTANTE,valor de la constante); Es una buena costumbre escribir el nombre de la constante en maysculas. Si el valor de la constante es una cadena, deben utilizarse las comillas. Si el valor es numrico, es indiferente el uso de comillas, aunque por organizacin es mejor usarlas. As como no utilizamos el signo $ para definirlas, no lo utilizaremos para imprimir su valor o realizar operaciones con ellas. Ejemplo: <? // definimos las dos constantes, el valor de una lo escribimos sin comillas define(constante1,56); define(constante2,50); // asignamos la suma de las dos constantes a una variable y la imprimimos

18

19

$suma_de_constantes=constante1+constante2; echo $suma_de_constantes; ?> Algunas constantes predefinidas importantes son las siguientes: __FILE__ __LINE__ PHP_VERSION PHP_OS nombre del script que est siendo ejecutado nmero de la lnea en ejecucin version de PHP nombre del sistema oerativo

Aclaremos algo para que no nos vamos a confundir despus: tanto __FILES__ como __LINE__ tienen dos (2) rayitas antes y dos (2) rayitas despus. Si escribimos sola una rayita no nos funciona. Que conste!. Operadores Hasta ahora hemos utilizado el signo igual (=) para asignar valores a las variables. Ya es hora de empezar a llamar las cosas por su nombre. Ese signo igual (=) se llama operador. Hay varios tipos de operadores y su funcin bsica es hacer algo con el valor de una variable. Ese algo puede ser asignar un valor, cambiar un valor o comparar dos o ms valores. Los operadores pueden ser: Operadores de asignacin Operadores aritmticos Operadores de comparacin Operadores lgicos

Operadores de asignacin Hasta ahora hemos trabajado con el operador de asignacin ms bsico: el signo igual (=). Debemos tener claro que un signo igual (=) no significa igual a, significa se asigna a. Dos signos igual seguidos (==) si significan igual a. Operador
+= -=

Ejemplo
$a+=3; $a-=3;

Accin
Cambia el valor de la variable sumando al valor actual el valor digitado despus del signo igual. Cambia el valor de la variable restando al valor actual el valor digitado despus del signo igual. Concatena (adiciona) el valor de la variable uniendo el valor actual con la cadena digitada despus del signo igual.

.=

$a.=cadena;

19

20
Vamos a crear un pequeo script que nos muestre como trabajan estos operadores de asignacin. Este script asignar un valor original a una variable y luego lo cambiar. El resultado se mostrar en la pantalla. <? // asignamos un valor inicial a la variable y lo mostramos $valor_original=100; echo "<p>El valor original de la variable es $valor_original"; // incrementamos su valor $valor_original+=25; echo "<p>El valor de la variable ahora es $valor_original"; // restamos 12 a su valor $valor_original-=12; echo "<p>Y ahora el valor de la variable es $valor_original"; // aadimos una cadena de texto a su valor $valor_original.=" mas esta cadena aadida a su valor original"; echo "<p>Por ltimo, el valor de la variable es $valor_original"; /*
aadimos una cadena de texto a su valor que a pesar de ser un nmero no se comporta como tal

*/ $valor_original.="100"; echo "<p>Ahora el valor de la variables es $valor_original"; ?> Notemos que as el valor de la cadena sea numrico, PHP lo considera un string y no lo suma al valor original sino que lo pone enseguida. Operadores aritmticos Los operadores aritmticos nos permiten realizar operaciones matemticas en nuestros scripts. En el cuadro siguiente se resumen las operaciones aritmticas en PHP y su sintaxis Operaciones aritmticas Operacin Suma Diferencia Producto Cociente Cociente entero Resto de la divisin Potencias ab Potencias ab Raiz cuadrada Sintaxis $a+$b $a-$b $a*$b $a/$b (int)($a/$b) $a%$b pow($a,$b) pow($a,$b) Sqrt($a) A 12 12 12 12 12 12 12 -7.3 12 B -7.3 -7.3 -7.3 -7.3 -7.3 5 5 -3 Resultado 4.7 19.3 -87.6 -1.64383561644 -1 2 248832 -0.00257058174836 3.46410161514

20

21
Raiz cuadrada Raiz ensima Sqrt($a) pow($a,(1/$b) -7.3 12 3; NaN 2.28942848511

Redondeos tipo Parte entera Parte entera Parte entera Parte entera Parte entera Parte entera Redondeo por defecto Redondeo por defecto Redondeo por defecto Redondeo por defecto Redondeo por defecto Redondeo por defecto Redondeo por exceso Redondeo por exceso Redondeo por exceso Redondeo por exceso Redondeo por exceso Redondeo por exceso Redondeo Redondeo Redondeo Redondeo Redondeo Redondeo Sintaxis (int)$a (int)$a (int)$a (int)$a (int)$a (int)$a floor($a) floor($a) floor($a) floor($a) floor($a) floor($a) ceil($a) ceil($a) ceil($a) ceil($a) ceil($a) ceil($a) round($a) round($a) round($a) round($a) round($a) round($a) A 12 -7.3 -13.8546 -24.5 13.8546 24.5 12 -7.3 -13.8546 -24.5 13.8546 24.5 12 -7.3 -13.8546 -24.5 13.8546 24.5 12 -7.3 -13.8546 -24.5 13.8546 24.5 Resultado 12 -7 -13 -24 13 24 12 -8 -14 -25 13 24 12 -7 -13 -24 14 25 12 -7 -14 -25 14 25

En operaciones combinadas, PHP se rige por los mismos criterios de prioridad de operaciones y uso de los parntesis que las matemticas tradicionales. No olvidemos poner especial atencin a los parntesis. Podemos realizar adems operaciones logartmicas y trigonomtricas en nuestros scripts. En la tabla siguiente vemos los operadores para estos menesteres.

Operaciones con logaritmos Operacin Logaritmo neperiano Sintaxis log($a) A 12 B Resultado 2.48490664979

21

22
Logaritmo neperiano Logaritmo decimal Logaritmo decimal exponencial ea exponencial ea exponencial 10a exponencial 10a log($a) Log10($a) Log10($a) Exp($a) Exp($a) pow(10,$a) pow(10,$a) -7.3 12 -7.3 12 -7.3 12 -7.3 NaN 1.07918124605 NaN 162754.791419 0.000675538775194 1E+12 5.01187233627E-08

Funciones trigonomtricas Operacin Seno de A (radianes) Seno de PI (radianes) Coseno de A (radianes) Coseno de PI (radianes) Tangente de A (radianes) Tangente de PI (radianes) Tangente de PI/2 (radianes) Sintaxis Sin($a) Sin(pi()) Cos($a) Cos(pi()) Tan($a) Tan(pi()) Tan(pi()) A 12 pi() 12 pi() 12 pi() pi()/2 B Resultado -0.536572918 1.22460635382E-16 0.843853958732 -1 0.843853958732 -1.22460635382E-16 1.63317787284E+16

Funciones trigonomtricas inversas Operacin Arco seno de A (en radianes) Arco seno de A (en radianes) Arco coseno de A (en radianes) Arco coseno de A (en radianes) Arco tangente de A (en radianes) Arco tangente de A (en radianes) Formatos de la variables numricas Cuando se asigna un valor numrico a una variable PHP es posible hacerlo de distintas formas: Los nmeros enteros pueden ser asignados en cualquiera de estas bases: Base decimal $a=nmero No se pueden utilizar ceros a la izquierda en los nmeros enteros Base octal $a=0nmero octal Basta poner un CERO delante del nmero para que sea interpretado como expresado en OCTAL. Obviamente solo admite los dgitos de 0 a 7 Base hexadecimal Sintaxis Asin($a) A B 12 Resultado 0.927295218002 NaN 0.643501108793 NaN 0.674740942224 1.48765509491 Asin($a) 0.8 Acos($a) 0.8 Acos($a) 12 Atan($a) 0.8 Atan($a) 12

22

23
$a=0xnmero octal Basta poner CERO EQUIS delante del nmero para que sea interpretado como expresado en hexadecimal. Obviamente admite como dgitos de 0 a 9 y de A a F Los nmeros en coma flotante pueden ser asignados en cualquiera de estas formas: Notacin decimal $a=nmero Se pueden utilizar un cero a la izquierda del punto decimal Notacin cientfica $a=nmero e exponente Se pueden utilizar un cero a la izquierda del punto decimal Ej: $a=1.2e5 asigna a $a el valor: 1.2 x 105 Otro ej: $a=1.2e-5 asigna a $a el valor: 1.2 x 10-5 Cambios de base PHP permite hacer todo tipo de cambios de base. Para evitar ser reiterativo, observa los ejemplos... all tienes las diferentes funciones que realizan este proceso. Presentaciones numricas La presentacin de valores numricos tiene una gran versatilidad en cuanto a los formatos. Formas de asignar valores a las variables Cuando se asignan valores numricos a una variable PHP cabe la posibilidad de hacerlo en distintas bases. Estos son unos ejemplos... Asignacin de valores en distintas bases Base Base Decimal Base Octal Base Hexadecimal Base Hexadecimal Notacin decimal Base Decimal Notacin cientfica Notacin cientfica Sintaxis $a=17 $a=017 $a=0x17 $a=0x1A3B $a=123000; $a=0.174 $a=1.23e5; $a=23.4e-2; Valor decimal 17 15 23 6715 123000 0.174 123000 0.234 Aplicable a Nmero enteros Nmero enteros Nmero enteros Nmero enteros Coma flotante Coma flotante Coma flotante Coma flotante

Cambios de base de numeracin PHP tiene funciones que permiten obtener una cadena de caracteres con la expresin en una nueva base de un nmero expresado en otra base cualquiera Asignacin de valores en distintas bases

23

24
Valor de la variable Base Nueva base $a=1234 $a=1234 $a=1234 $a=1234 $a=1234 $a=1010011 $a=1234 $a=1234 $a=1234 10 10 10 8 16 2 7 5 18 8 16 2 10 10 10 14 18 5 Sintaxis decoct($a) dechex($a) decbin($a) octdec($a) hexdec($a) bindec($a) base_convert($a,7,14) base_convert($a,5,18) base_convert($a,18,5) Expresin 2322 4d2 10011010010 668 4660 83 254 ae 202123

Formato de presentacin de nmeros En PHP es posible establecer el formato de la presentacin de los valores numricos utilizando alguna de estas funciones. number_format (nmero) Presenta la parte entera del nmero (sin decimales) y utiliza como separador de miles una coma (,). number_format (nmero , nmero de cifras decimales) Presenta el nmero de cifras decimales que se indiquen y utiliza como separador decimal un punto (.) y el separador de miles es una coma (,). number_format (nmero , nm decimales , "sep. decimal" , "sep. miles") Presenta establecer el nmero de cifras decimales de la presentacin as como el carcter que se establezca como separador de decimales y como separadores de miles. Cuidado...!!. No olvidemos escribir los caracteres de separacin entre comillas... Aqu tienes algunos ejemplos... Formatos de presentacin de nmero Valor inicial $a=1234567.234 $a=1234567.234 $a=1234567.234 $a=1234567.234 N de Sep. Sep. decimales dec. miles 0 2 1 1 . , ' , , . esp Sintaxis number_format($a) number_format($a,2) number_format($a ,2 , "," ,".") number_format($a ,2 , " ' " ," ") Resultado 1,234,567 1,234,567.23 1.234.567,2 1 234 567'2

Creemos ahora un script sencillo que nos muestre como funcionan los operadores aritmticos bsicos. Este script asignar valores a dos variables, realizar operaciones matemticas sencillas con ellas y mostrar los resultados:

24

25
<? // asignamos valores a las dos variables $a=85; $b=24; // imprimimos esos valores echo "<p>Los valores iniciales de \$a y \$b son $a y $b</p>"; // recordamos el uso de \$ verdad? // sumamos las variables y asignamos el resultado a una tercera $c=$a+$b; // mostramos el resultado echo "<p>La suma de las variables \$a y \$b es: $c</p>"; // restamos las variables y asignamos el resultado a una tercera $c=$a-$b; // mostramos el resultado echo "<p>La resta de las variables \$a y \$b es: $c</p>"; // sumamos las variables y asignamos el resultado a una tercera $c=$a+$b; // mostramos el resultado echo "<p>La suma de las variables \$a y \$b es: $c</p>"; // multiplicamos las variables y asignamos el resultado a una tercera $c=$a*$b; // mostramos el resultado echo "<p>La multiplicacin de las variables \$a y \$b es: $c</p>"; // dividimos las variables y asignamos el resultado a una tercera $c=$a/$b; // mostramos el resultado echo "<p>La divisin de las variables \$a y \$b es: $c</p>"; // dividimos las variables, calculamos el resto de la divisin y // asignamos el resultado a una tercera $c=$a%$b; // mostramos el resultado echo "<p>El resto de la divisin (mod) de las variables \$a y \$b es: $c</p>"; ?> Operadores de comparacin Los operadores de comparacin que provee PHP son los siguientes: Operador == Definicin Igual a
25

26
=== != <> > < >= <= Exactamente igual a No igual a No igual a Mayor que Menor que Mayor o igual a Menor o igual a

El resultado de estas comparaciones ser verdadero o falso, representados por un 1 en el caso de verdadero y un 0 o NULL (caracter ASCII 0) en el caso contrario. Desglosemos un poco estos operadores: Igual a (==) Ejemplo: $A == $B El operador == compara los valores de dos variables y devuelve 1 en el caso de que sean iguales (sin importar su tipo) y el valor NULL (carcter ASCII 0) cuando no lo son. Si comparamos una cadena con un nmero, mira si la cadena contiene nmeros. Si es as, verifica que estos nmeros se encuentren al principio de la cadena y de ser as, toma solo el valor entero de la cadena y entonces realiza la comparacin. Un poco enredado?, tomemos el siguiente ejemplo para comprender mejor:
Variable 1 Variable 2 Operador Sintaxis Resultado Razn Toma el valor entero que se encuentra al inicio de la cadena Los valores no son iguales El valor entero que se encuentra al inicio de la cadena no es igual al de la otra variable. Devuelve 0 Nulo (vaco)

$a=123 $b="123abc" $a=123 $b=124

== ==

$A==$B $A==$B

1 0

$a=123 $b=12abc3

==

$A==$B

$a=123 $b=abc123 $a=123 $a=123 $b=1234 $b=123

== == ==

$A==$B $A==$B $A==$B 1

Los valores no son iguales Los valores no son iguales Los valores no son iguales, a pesar de uno ser numrico y el otro ser tipo cadena.

Este operador discrimina maysculas de minsculas y al comparar cadenas formadas por caracteres alfabticos compara los valores de los cdigos ASCII de los caracteres de la cadena. La comparacin del primer carcter que tenga cdigo ASCII distinto en ambas (de izquierda a derecha) ser la que condicione el resultado. Exactamente igual a (===) Sintaxis: $a===$b

26

27

El operador === es un comparador de igualdad en sentido estricto. Para que devuelva 1 es necesario que sean iguales los contenidos de las variables y tambin su tipo. No igual a (!=) Sintaxis: $a != $b El operador != devuelve 1 cuando los valores de las variables son distintos y devuelve NULL cuando son iguales. A diferencia del anterior, no hace la comparacin en sentido estricto. Para considerar iguales dos variables no es necesario que sean del mismo tipo. No igual a (<>) Sintaxis: $a <> $b El operador <> devuelve 1 cuando los valores de las variables son distintos y devuelve NULL cuando son iguales. Igual que el anterior, no hace la comparacin en sentido estricto. Para considerar iguales dos variables no es necesario que sean del mismo tipo. Menor que (<) Sintaxis: $a < $b El operador < devuelve 1 cuando los valores de $a son menores que los de $b. Menor o igual a (<=) Sintaxis: $a <= $b Devuelve 1 cuando los valores de $a son menores o iguales que los de $b. Mayor que (>) Sintaxis: $a > $b El operador > devuelve 1 cuando los valores de $a son mayores que los de $b. Mayor o igual a (>=) Sintaxis: $a >= $b Devuelve 1 cuando los valores de $a son mayores o iguales que los de $b. Miremos en las siguientes tablas, algunos ejemplos de manejo de los operadores de comparacin Operador == A $a=123 B $b=123 Operador Sintaxis Resultado == $a==$b 1

27

28
$a=123.0 $a=123 $a=123 $a="abc" $a="abc" $a="abc" $b=123 $b="123" $b=124 $b="abc" $b="abc" $b="abcd" == == == == == == == $a==$b $a==$b $a==$b $a==$b $a==$b $a==$b $a==$b 1 1 1 1

$a=123 $b="123abc"

Operador === A $a=123 $a=123.0 $a=123 $a=123 $a="abc" $a="abc" $a="abc" B $b=123 $b=123 $b="123" $b=124 $b="abc" $b="abc" $b="abcd" Operador Sintaxis Resultado === === === === === === === === $a===$b $a===$b $a===$b $a===$b $a===$b $a===$b $a===$b $a===$b 1 1

$a=123 $b="123abc"

Operador != A $a=123 $a=123.0 $a=123 $a=123 $a="abc" $a="abc" $a="abc" B $b=123 $b=123 $b="123" $b=124 $b="abc" $b="abc" $b="abcd" Operador Sintaxis Resultado != != != != != != != != $a!=$b $a!=$b $a!=$b $a!=$b $a!=$b $a!=$b $a!=$b $a!=$b 1 1 1

$a=123 $b="123abc"

Operador < A $a=123 $a=123 $a=123.0 $a=123 $a="abc" $a="abc" $a="abc" B $b=123 $b="123" $b="123" $b=124 $b="abc" $b="abc" $b="abcd" Operador Sintaxis Resultado < < < < < < < < $a<$b $a<$b $a<$b $a<$b $a<$b $a<$b $a<$b $a<$b 1 1

$a=123 $b="123abc"

28

29
$a="a" $a="a" $a="abc" $a="123" $a=123 $b="a" $b="a" $b="a" $b=124 $b="124" < < < < < $a<$b $a<$b $a<$b $a<$b $a<$b 1 1 1

Operador <= A $a=123 $a=123.0 $a=123 $a=123 $a="abc" $a="abc" $a="abc" $a="a" $a="a" $a="abc" $a="123" $a=123 B $b=123 $b=123 $b="123" $b=124 $b="abc" $b="abc" $b="abcd" $b="a" $b="a" $b="a" $b=124 $b="124" Operador Sintaxis Resultado <= <= <= <= <= <= <= <= <= <= <= <= <= Operador > A $a=123 $a=123 $a=123 $a="abc" $a="abc" $a="abc" $a="a" $a="a" $a="abc" $a="123" $a=123 B $b=123 $b="123" $b=124 $b="abc" $b="abc" $b="abcd" $b="a" $b="a" $b="a" $b=124 $b="124" Operador Sintaxis Resultado > > > > > > > > > > > > $a>$b $a>$b $a>$b $a>$b $a>$b $a>$b $a>$b $a>$b $a>$b $a>$b $a>$b $a>$b 1 1 1 $a<=$b $a<=$b $a<=$b $a<=$b $a<=$b $a<=$b $a<=$b $a<=$b $a<=$b $a<=$b $a<=$b $a<=$b $a<=$b 1 1 1 1 1 1 1 1 1 1

$a=123 $b="123abc"

$a=123 $b="123abc"

Operador >= A $a=123 B $b=123 Operador Sintaxis Resultado >= $a>=$b 1

29

30
$a=123 $a=123 $a="abc" $a="abc" $a="abc" $a="a" $a="a" $a="abc" $a="123" $a=123 Operadores lgicos Los operadores lgicos son operadores de comparacin que actan sobre variables cuyos valores sean nicamente: VERDADERO o FALSO Los operadores lgicos en PHP son: AND, &&, OR, ||, XOR y ! AND Sintaxis: $a AND $b El operador AND devuelve VERDADERO (1) nicamente cuando todas las variables lgicas comparadas son verdaderas y devuelve FALSO (0) cuando al menos una de las variables lgicas tiene el valor de FALSO. && Sintaxis: $a && $b El operador && se comporta de forma idntica al operador AND. La nica diferencia entre ambos (segn dice el Manual oficial de PHP) es que operan con distinta precedencia. Bueno, para ser sincero, hasta el momento no he podido saber cual es esa diferencia, ambos son asociativos por la izquierda y al construir tablas de verdad con ambos, los resultados parecen idnticos. OR Sintaxis: $a OR $b Para que el operador OR devuelva VERDADERO (1) es suficiente que una sola de las variables lgicas comparadas sea verdadera y solo devolver FALSO (0) cuando todas ellas sean FALSAS. || Sintaxis: $a || $b $b="123" $b=124 $b="abc" $b="abc" $b="abcd" $b="a" $b="a" $b="a" $b=124 $b="124" >= >= >= >= >= >= >= >= >= >= >= $a>=$b $a>=$b $a>=$b $a>=$b $a>=$b $a>=$b $a>=$b $a>=$b $a>=$b $a>=$b $a>=$b 1 1 1 1 1 1

$a=123 $b="123abc"

30

31

El operador || se comporta de forma idntica al operador OR. Son vlidos los comentarios hechos con relacin a AND y &&. XOR Sintaxis: $a XOR $b El operador XOR devuelve VERDADERO (1) cuando ES CIERTO UNA SOLA de los dos variables lgicas comparadas y FALSO (0) cuando AMBAS son CIERTAS o cuando AMBAS son FALSAS. Por ejemplo, la instruccin $a XOR $b XOR $c es equivalente a ($a XOR $b) XOR $c . es decir, realiza la comparacin de las dos primeras variables y luego compara el resultado con la tercera de las variables. ! Sintaxis: ! $a Este operador (negacin) devuelve VERDADERO si la variable lgica $a es FALSA y devuelve FALSO si el valor de la variable $a es VERDADERO. Tablas de verdad de los operadores lgicos: Operador AND Variables $a>$b $a>$b $a>$b $a<$b $a<$b $a<$b $a>$b $a<$b $a=32; $b=0; $c=-7; $d=4.32; $f="23 Pesos" Resultado 1 $a>$c $a>$c $a<$c $a>$c $a<$c $a>$c $a<$c $a<$c $a>$f $a<$f $a>$f $a>$f $a>$f $a<$f $a<$f $a<$f Operador && Variables $a>$b $a>$b $a>$b $a<$b $a<$b $a<$b $a=32; $b=0; $c=-7; $d=4.32; $f="23 Pesos" Resultado 1 $a>$c $a>$c $a<$c $a>$c $a<$c $a>$c $a>$f $a<$f $a>$f $a>$f $a>$f $a<$f 1 1 1 1 1 1 1 1 1 1 1 Condicin A Condicin B Condicin C A B C 1 1 1 1 1 1 1 1 1 1 1 1 Condicin A Condicin B Condicin C A B C

31

32
$a>$b $a<$b $a<$c $a<$c $a<$f $a<$f Operador OR Variables $a>$b $a>$b $a>$b $a<$b $a<$b $a<$b $a>$b $a<$b $a=32; $b=0; $c=-7; $d=4.32; $f="23 Pesos" Resultado 1 1 1 1 1 1 1 1 1 1 1 1 1 $a>$c $a>$c $a<$c $a>$c $a<$c $a>$c $a<$c $a<$c $a>$f $a<$f $a>$f $a>$f $a>$f $a<$f $a<$f $a<$f Operador || Variables $a>$b $a>$b $a>$b $a<$b $a<$b $a<$b $a>$b $a<$b $a=32; $b=0; $c=-7; $d=4.32; $f="23 Pesos" Resultado 1 1 1 1 1 1 1 1 1 1 1 1 1 $a>$c $a>$c $a<$c $a>$c $a<$c $a>$c $a<$c $a<$c $a>$f $a<$f $a>$f $a>$f $a>$f $a<$f $a<$f $a<$f Operador XOR Variables $a=32; $b=0; $c=-7; $d=4.32; $f="23 Pesos" Condicin Condicin B A B A $a>$b $a>$b $a<$b $a<$b $a>$c $a<$c $a>$c $a<$c 1 1 1 1 1 1 Resultado 1 1 1 1 1 1 Condicin A Condicin B Condicin C A B C 1 1 1 1 1 1 Condicin A Condicin B Condicin C A B C 1

Operador XOR Variables $a=32; $b=0; $c=-7; $d=4.32; $f="23 Pesos" Resultado Condicin A Condicin B Condicin C A B C

32

33
$a>$b $a>$b $a>$b $a<$b $a<$b $a<$b $a>$b $a<$b $a>$c $a>$c $a<$c $a>$c $a<$c $a>$c $a<$c $a<$c $a>$f $a<$f $a>$f $a>$f $a>$f $a<$f $a<$f $a<$f 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Observemos algo detenidamente: cuando el resultado es FALSO XOR devuelve NULL, los dems operadores en cambio devuelven CERO. Por qu?. NPI (no poseo informacin). Estructuras de control Todo archivo de comandos PHP se compone de una serie de sentencias. Una sentencia puede ser una asignacin, una llamada a una funcin, un ciclo, una sentencia condicional e incluso una sentencia que no haga nada (una sentencia vaca). Recordemos que las sentencias normalmente acaban con punto y coma. Adems, las sentencias se pueden agrupar en grupos de sentencias encapsulndolas con llaves. Un grupo de sentencias es tambin una sentencia. En este captulo se describen los diferentes tipos de sentencias. Las estructuras de control permiten bifurcar el flujo del programa y as ejecutar unas partes u otras del cdigo segn ciertas condiciones. PHP dispone de todas las estructuras clsicas de los lenguajes de alto nivel, con la sintaxis de C, C++ o Java, y adems algunas otras estructuras ms tpicas de lenguajes interpretados como Perl o Bash. En todos los casos, las estructuras de control contienen una expresin cuya evaluacin a cierto o falso determinar el flujo a seguir dentro de la estructura. Estas expresiones pueden ser una variable, una funcin (el valor que devuelve), una constante, o cualquier combinacin de stas con los operadores vistos en el punto anterior. Ahora vamos entonces a imprimir un poco de "dinamismo" a nuestros scripts, ya que a partir de diversas estructuras indicaremos que accin se debe realizar en cada caso. Esto nos dar adems la posibilidad de realizar una misma accin muchas veces con tan solo una lnea de cdigo. Iniciemos con una estructura de control que seguramente no nos es desconocida: el ciclo ifelse if es una estructura de control utilizada para tomar decisiones segn se cumpla, o no, una condicin (o varias). Su estructura bsica es la siguiente: if (condicion) accin a realizar;

33

34
if(condicion) ejecuta la instruccin que se indica a continuacin de l solo en el caso de que se cumpla esa condicin. Ejemplo: $a=5; $b=4; if ($a > $b) echo \$a si es mayor que \$b; Notemos que no utilizamos ( { ) para abrir ni cerrar el ciclo. POR QUE? Porque cuando se va avaluar una sola instruccin no es necesario, pero es una buena costumbre usarlas para abrir y cerrar ciclos aun cuando se evala una sola instruccin. Variemos un poco la estructura bsica de if aumentando el nmero de instrucciones a ejecutar. if(condicion) { instrucciones; } Esta es una ampliacin del condicional anterior. Cuando es necesario que se ejecute ms de una instruccin, se deben encerrar entre { }. Veamos su sintaxis: if (condicion/es) { instruccin 1; instruccin 2; } Ejemplo: <? $a=13; $b="13"; if ($a==$b) { echo ("el valor de \$a es igual al valor de \$ b"); echo "<br>"; // incluimos un retorno de carro mediante cdigo HTML echo "Este ejemplo incluye varias instrucciones"; } ?> Y qu sucede si al no cumplir la(s) condicin(es) necesitamos que se ejecute(n) otra(s) instruccin(es) ? Debemos entonces utilizar el condicional if(condicion)...else

34

35
if(condicion) ampliado con else permite escribir una serie de instrucciones ejecutables en el caso de que se cumpla la condicin y otras instrucciones distintas ejecutables en el caso de que no se cumpla. Veamos su sintaxis: if (condicion/es) { // instrucciones que se ejecutan si se cumple la condicin instruccin 1; instruccin 2; } else { // instrucciones que se ejecutan si no se cumple la condicin instruccin 1; instruccin 2; } Ejemplo: <? $a=3; $b="4"; if ($a==$b) { echo ("El valor de \$a es igual al valor de \$b"); echo "<br>"; echo " Este ejemplo incluye varias instrucciones "; } else { echo("El valor de \$a no es igual al valor de \$b "); echo "<br>"; echo ("Como no se cumpli la condicin, entramos al else "); } ?> Mucho ojo con las { }. Recordemos que si olvidamos abrir o cerrar alguno de ellos en un ciclo, nuestro cdigo inmediatamente generar errores. Es posible utilizar elseif dentro de la estructura del ciclo ifelse. Veamos su sintaxis y un ejemplo de esta situacin: if (condicin 1) { // instrucciones que se ejecutan si se cumple la condicin 1 instruccin 1; instruccin 2; } elseif (condicin 2) {

35

36
// instrucciones que se ejecutan si se cumple la condicin 2 pero no la condicin 1 instruccin 1; instruccin 2; } else { // instrucciones que se ejecutan si no se cumple la condicin 1 ni la condicin 2 instruccin 2; } Ejemplo: <? $a=1; if ($a==1) { echo "El valor de la variable \$a es 1"; } elseif ($a==2) { echo "El valor de la variable \$a es 2"; } elseif ($a==3) { echo "El valor de la variable \$a es 3"; } else { echo "El valor de la variable \$a no es 1, ni 2, ni 3"; } ?> Veamos ahora unos ejemplos con algo que nos ayudar a entenderlo mejor y utilicemos los operadores que vimos en un captulo anterior: <? $edad=18; if($edad>=18) { echo Puedes comprar cerveza; } else { echo "No puedes comprar cerveza porque eres menor de 18 aos"; } ?> Operador AND o && <? $edad=18;
36

instruccin 1;

37
$dinero=2000; // esta lnea poda ser tambin // if ( ($edad >=18) AND ($dinero >1000) ) if ( ($edad >=18) && ($dinero >1000) ) { echo Puedes comprar cerveza porque tienes 18 y tu dinero es mayor que 1000; } else { echo "No tienes dinero y eres menor de 18 aos, no puedes comprar cerveza" ; } ?> Operador OR o || <? $edad=18; $dinero=2000; // esta lnea poda ser tambin // if ( ($edad >=18) OR ($dinero >1000) ) if ( ($edad >=18) || ($dinero >1000) ) { echo Puedes comprar cerveza porque aqu importa solo tu edad o tu dinero; } else { echo "O no tienes dinero o no eres mayor de 18 aos, no puedes comprar cerveza" ; } ?> while Los ciclos while son los tipos de ciclo ms simples en PHP. La forma bsica de una sentencia while es: while (condicin) instruccin; Esta opcin solo permite instrucciones de una sola lnea. Para incluir ms instrucciones debemos utilizar ( { } ). La funcin while (condicin) repite la instruccin mientras que se cumpla la condicin. El significado de una sentencia while es simple: le dice a PHP que ejecute la(s) sentencia(s) anidada(s) repetidamente, mientras la expresin while se evale como TRUE. El valor de la expresin es comprobado cada vez al principio del ciclo, as que incluso si este valor cambia durante la ejecucin de la(s) sentencia(s) anidada(s), la ejecucin

37

38
no parar hasta el fin de la iteracin (cada vez que PHP ejecuta las sentencias en el ciclo es una iteracin). A veces, si la expresin while se evala como FALSE desde el principio de todo, la(s) sentencia(s) anidada(s) no se ejecutarn ni siquiera una vez. Como con la sentencia if, se pueden agrupar mltiples sentencias dentro del mismo ciclo while encerrando un grupo de sentencias con llaves: while (condicion) { instruccin 1; instruccin 2; } Una sintaxis alternativa al uso de llaves ( { } ) es la siguiente. Si delante de la condicin ponemos dos puntos ( : ) se repetirn en el ciclo todas las instrucciones que escribamos hasta que aparezca la instruccin de cierre del ciclo, la cual sera: endwhile; Ejemplo: <? while (condicion): ?> ...codigo HTML... .... ..... <? endwhile; ?> Los siguientes ejemplos son idnticos, y ambos imprimen nmeros del 1 al 10: <? /* ejemplo 1 */ $i = 1; while ($i <= 10) { echo $i++; /* el valor impreso sera $i antes del incremento */ } ?> <? /* ejemplo 2 */ $i = 1; while ($i <= 10): echo $i; $i++; endwhile; ?> dowhile

38

39

Los ciclos do...while son muy similares a los ciclos while, excepto que las condiciones se comprueban despus de ejecutar las instrucciones y no al principio. La principal diferencia frente a los ciclos regulares while es que se garantiza la ejecucin de la primera iteracin de un ciclo dowhile (la condicin se comprueba slo al final de la iteracin), mientras que puede no ser necesariamente ejecutada con un ciclo while regular (la condicin se comprueba al principio de cada iteracin, si esta se evala como FALSE desde el principio la ejecucin del ciclo finalizar inmediatamente). Solo hay una sintaxis para ciclos do...while: do { instruccin 1; instruccion2; } while (condicin) ejemplo: <? $i = 0; do { echo $i; } while ($i>0); ?> El ciclo de arriba se ejecutara una sola vez. Despus de la primera iteracin, cuando la condicin se comprueba, se evala como FALSE ($i no es mayor que 0) y la ejecucin del ciclo termina.

for El ciclo for se usa para repetir una misma operacin un nmero determinado de veces. Su sintaxis es la siguiente: for (inicializacin; condicin; incremento) { sentencia(s) a ejecutar mientras se cumpla la condicin; } El ciclo for esta compuesto de 3 partes: Inicializacin: Se ejecuta tan solo al iniciar por primera vez el ciclo. En esta parte se suele colocar la variable que contar el nmero de veces que se repite el ciclo.

39

40

Condicin: Es la condicin que se evaluar cada vez que se inicie el ciclo. Esta condicin es la que determina la duracin del ciclo. Incremento: Sirve para indicar los cambios que queremos ejecutar en las variables cada vez que se ejecuta el ciclo. El parmetro inicializacin permite asignar un valor inicial a una variable, llammosla contador, la cual contar el nmero de veces que se repetir el ciclo. El parmetro condicin permite establecer el valor final de la variable contador y con el parmetro incremento se pueden establecer los incrementos o decrementos de esta variable (contador) en cada iteracin del ciclo. Las instrucciones que se encuentren entre ( { } ) se ejecutarn cada vez que se entre de nuevo al ciclo. Y cmo funciona?. Veamos: La primera expresin (inicializacin) se evala (ejecuta) incondicionalmente una vez al principio del ciclo. Al comienzo de cada iteracin, se evala la condicin. Si se evala como TRUE, el ciclo contina y las sentencias siguientes se ejecutan. Si se evala como FALSE, la ejecucin del ciclo finaliza. Al final de cada iteracin, se ejecuta el incremento. Un ejemplo de su uso seria el siguiente: for ($i=1; $i<=10; $i++) // notemos que el incremento no termina con ; { echo "El numero actual es: ",$i; } De esta forma escribira todos los nmeros contenidos entre 0 y 10. Cada una de las expresiones puede estar vaca. Que incremento est vaca significa que el ciclo debera correr indefinidamente (PHP implcitamente lo considera como TRUE, al igual que C). Esto puede que no sea tan intil como se podra pensar, puesto que a menudo se quiere salir de un ciclo usando una sentencia break condicional en vez de usar la condicin de for. Consideremos los siguientes ejemplos. Todos ellos muestran nmeros del 1 al 10: /* ejemplo 1 */ for ($i = 1; $i <= 10; $i++) { echo $i; } /* ejemplo 2 */ for ($i = 1;;$i++) { if ($i > 10) { break; } echo $i; } /* ejemplo 3 */ $i = 1;

40

41
for (;;) { if ($i > 10) { break; } echo $i; $i++; } /* ejemplo 4 */ for ($i = 1; $i <= 10; echo $i, $i++) ; PHP tambin soporta la "sintaxis de dos puntos" alternativa para ciclos for: for (inicializacin; condicin; incremento): sentencia; ...; endfor; Esta es una alternativa que sustituye la { por dos puntos ( : ) y la } por endfor;. SWITCH switch toma distintas decisiones en funcin de distintos estados de la variable. Su sintaxis es la siguiente: switch (expresion) { case valor1: sentencia a ejecutar cuando la expresin tiene como valor valor1; break; case valor2: sentencia a ejecutar cuando la expresin tiene como valor valor2 break; case valor3: sentencia a ejecutar cuando la expresin tiene como valor valor3 break; default: sentencia que se ejecutar por defecto cuando no se cumpla ninguna de las condiciones anteriores; } Notemos que la lnea case no finaliza con punto y coma ( ; ) sino con dos puntos ( : ). Despus no digan que no les dije, que no saban, que en la vida haban escuchado eso, que bla, bla ,bla 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 varios valores diferentes, y ejecutar una parte de cdigo distinta dependiendo de a qu valor es igual. Para ello sirve la sentencia switch. Los siguientes dos ejemplos son dos modos distintos de obtener un mismo resultado, uno usa una serie de sentencias if, y el otro usa la sentencia switch: Ejemplo 1 if ($i == 0) { switch ($i) { Ejemplo 2

41

42
echo "i es igual a 0"; } if ($i == 1) { echo "i es igual a 1"; } if ($i == 2) { echo "i es igual a 2"; } } Es importante entender cmo se ejecuta la sentencia switch para evitar errores: La sentencia switch ejecuta lnea por lnea (realmente, sentencia a sentencia). Al comienzo, no se ejecuta cdigo. Slo 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 hasta la primera vez que vea una sentencia break. Si no se escribe una sentencia break al final de una lista de sentencias case, PHP seguir ejecutando las sentencias del siguiente case. Es importante no olvidar las sentencias break. Por ejemplo: switch ($i) { case 0: echo "i es igual a 0"; case 1: echo "i es igual a 1"; case 2: echo "i es igual a 2"; } Aqu, si $i es igual a 0, PHP ejecutara todas las sentencias echo! POR QU? Elemental mi querido Watson, PORQUE NO INCLUMOS LOS BREAK! Si $i es igual a 1, PHP ejecutara las ltimas dos sentencias echo y slo si $i es igual a 2, se obtendra la conducta esperada y solamente se mostrara i es igual a 2. En una sentencia switch, la condicin se evala slo una vez y el resultado se compara a cada sentencia case. En una sentencia elseif, la condicin se evala otra vez. Un case especial es el default. Este case coincide con todo lo que no coincidan los otros case. Por ejemplo: switch ($i) {
42

case 0: echo "i es igual a 0"; break; case 1: echo "i es igual a 1"; break; default: echo "i es igual a 2"; break;

43
case 0: echo "i es igual a 0"; break; case 1: echo "i es igual a 1"; break; case 2: echo "i es igual a 2"; break; default: echo "i no es igual a 0, 1 o 2"; } La expresin case puede ser cualquier expresin que se evale a un tipo simple, es decir, nmeros enteros o de punto flotante y cadenas de texto. No se pueden usar aqu ni arrays (arreglos) ni objetos a menos que se conviertan a un tipo simple. Funciones de cadenas PHP nos presenta una serie de funciones para el manejo de cadenas. Estas funciones nos sern especialmente tiles al realizar validaciones. Algunas de las diferentes funciones de manejo de cadenas de caracteres son las siguientes: chr(n) Devuelve el carcter cuyo cdigo ASCII es n Ejemplo: echo chr(112); imprimira el caracter p ord(cadena) Devuelve el cdigo ASCII del primer carcter de la cadena Ejemplo: echo ord(php); imprimira 112

strlen(cadena) Devuelve la longitud de la cadena. Es decir, cuenta el nmero de caracteres que contiene la cadena, incluidos los espacios. Ejemplo: echo strlen(php); imprimira 3

strtolower(cadena) Torna en minsculas todos los caracteres de la cadena Ejemplo: echo strtolower (PHP); imprimira php

strtoupper(cadena) Convierte en maysculas todos los caracteres de la cadena Ejemplo: echo strtoupper (php); imprimira PHP

43

44
ucwords(cadena) Convierte a maysculas la primer letra de cada palabra de la cadena Ejemplo: Php echo ucwords (programacion en php); imprimira Programacion En

Debemos tener en cuenta que, si al digitar el cdigo utilizamos las tildes presionando la tilde y luego la vocal, PHP interpreta esa tilde como el fin de la palabra y la letra siguiente la imprimira en mayscula. Ejemplo: Php echo ucwords (programacin en php); imprimira ProgramaciN En

ucfirst(cadena) Convierte a maysculas la primer letra de la cadena y pone las restante en minsculas Ejemplo: php echo ucfirst (programacin en php); imprimira Programacin en

ltrim(cadena) Elimina los espacios al principio de la cadena Ejemplo: echo ltrim ( php); imprimira php

rtrim(cadena) Elimina los espacios al final de la cadena Ejemplo: echo rtrim (php ); imprimira php

trim(cadena) Elimina los espacios tanto al principio como al final de la cadena Ejemplo: echo trim ( php ); imprimira php

chop(cadena) Elimina los espacios al final de la cadena. Cumple la misma funcin de rtrim. Ejemplo: echo chop (php ); imprimira php

Nota: trim, ltrim y rtrim eliminan adems de los espacios, los caracteres protegidos \n, \r, \t, \v y \0 substr(cadena, inicio, longitud) Devuelve parte de una cadena. Muestra la parte de la cadena especificada por los parmetros inicio y longitud.

44

45
Si el valor de inicio es positivo, contar, a partir de la izquierda tantos caracteres como se indican en el valor de inicio y desde all, mostrar los caracteres de la cadena que siguen. Se debe notar que se empieza a contar desde cero (0) y no desde uno (1). Ejemplo:
$ejemplo = substr ("abcdefghi", 2, 4); echo $ejemplo;

En este ejemplo, el valor de inicio es 2, lo cual quiere decir que se contara as: 0, 1, 2. Es decir, que la a es el caracter 0, la b el caracter uno y la c el caracter 2. El script imprime entonces el caracter 2 y los siguientes 3 caracteres para completar cuatro (que es el valor del parmetro longitud). O sea que este cdigo imprimira la cadena: cdef Si inicio es negativo, la cadena devuelta comenzar en dicha posicin desde el final de cadena. Cuando se usa negativo el valor del parmetro inicio, no empieza a contar desde cero sino desde uno. Ejemplo:
$ejemplo = substr ("abcdefghi", -4, 3); echo $ejemplo;

En este ejemplo, el valor de inicio es -3, lo cual quiere decir que se contara desde el final de la cadena hacia atrs as: 1, 2, 3. Es decir, que la i es el caracter -1, la h el caracter -2, la g el caracter -3 y la f el caracter -4. El script imprime entonces el caracter -4 y los siguientes 2 caracteres hacia la derecha para completar 3 (que es el valor del parmetro longitud). O sea que este cdigo imprimira la cadena: fgh Se puede obviar el valor longitud, lo cual indicara que se imprima el resto de la cadena tomando en cuenta el valor inicio y cumpliendo con los parmetros descritos arriba. Ejemplo:
$ejemplo = substr ("abcdefghi", 4); echo $ejemplo;

En este ejemplo, el valor de inicio es 2, lo cual quiere decir que se contara as: 0, 1, 2. Es decir, que la a es el caracter 0, la b el caracter uno y la c el caracter 2. El script imprime entonces el caracter 2 y como no se ha especificado el valor del parmetro longitud imprime a continuacin el resto de la cadena. O sea que este cdigo imprimira: efeghi
$ejemplo = substr ("abcdefghi", 4); echo $ejemplo;

En este ejemplo, el valor de inicio es -4, lo cual quiere decir que se contara desde el final de la cadena hacia atrs as: 1, 2, 3, 4. Es decir, que la i es el caracter -1, la h el caracter -2, la g el caracter -3 y la f el caracter -4. El script imprime entonces el caracter -4 y como no se ha especificado el valor del parmetro longitud imprime a continuacin el resto de la cadena. O sea que este cdigo imprimira: fghi

45

46

substr_count (cadena, subcadena) Cuenta y devuelve el nmero de veces que la subcadena se encuentra en la cadena. En el caso de que una de las cadenas (o las dos) corresponda a una variable, no se usan las comillas. Ejemplo: $ejemplo=substr_count("esta es una prueba", "es"); echo $ejemplo; En este ejemplo, el valor de subcadena es es, lo cual quiere decir que se busca el nmero de veces que se encuentre esa slaba en la cadena. Pongamos en negrilla la slaba que buscamos y contemos: esta es una prueba. Si mi matemtica no me falla, la subcadena se repite dos veces en la cadena verdad?. O sea que este cdigo imprimira: 2 Podemos como subcadena, pasar una variable, y el script se comporta igual. Ejemplo: $subcadena=es; $ejemplo=substr_count("esta es una prueba", $subcadena); echo $ejemplo; strpos (cadena, subcadena) Retorna la primera posicin numrica del caracter a validar en una cadena. A diferencia de strrpos(), esta funcin puede usar un solo caracter o toda una cadena para realizar la bsqueda. Si la cadena o carcter buscado no se encuentra, devuelve valor falso. En el caso de que una de las cadenas (o las dos) corresponda a una variable, no se usan las comillas. La primera posicin es la cero (0). Ejemplo: $ejemplo=strpos("y esta es otra prueba", "es"); echo $ejemplo; En este ejemplo, el valor de subcadena es es, lo cual quiere decir que se busca la posicin en que se encuentre esa slaba en la cadena. Pongamos en negrilla la slaba que buscamos y contemos posiciones: y esta es otra prueba. La primera posicin la ocupa la letra y, la segunda la ocupa un espacio . La tercera la letra e, pero como esa e forma parte de la slaba buscada, tomamos que la tercera posicin sera ocupada por la slaba es. Entonces la subcadena ocupa la posicin 3 verdad? NO!. Recordemos que se empieza a contar desde cero (0). Esto quiere decir que la subcadena ocupa la posicin 2. O sea que este cdigo imprimira: 2 Strrpos (cadena, subcadena)
46

47

Retorna la ltima posicin numrica del caracter a validar en una cadena. Si el caracter buscado no se encuentra, devuelve valor falso. La primera posicin es la cero (0). Ejemplo: $ejemplo=strrpos("y esta es otra prueba", "es"); echo $ejemplo; En este ejemplo, el valor de subcadena es es, pero como esta orden busca un caracter, ignorar la letra s y buscar la ltima letra e que se encuentre en la cadena. Pongamos en negrilla el caracter que buscamos y contemos posiciones: y esta es otra prueba. La primera posicin la ocupa la letra y, la segunda la ocupa un espacio . La tercera la letra e, pero como esa e forma parte de la slaba buscada, tomamos que la tercera posicin sera ocupada por la slaba es. Entonces la subcadena ocupa la posicin 3 verdad? NO!. Recordemos que se busca un caracter y se empieza a contar desde cero (0). Esto quiere decir que la ltima letra e en nuestro ejemplo ocupa la posicin 18. O sea que este cdigo imprimira: 18 strrev(cadena) Devuelve la cadena invertida Ejemplo: echo strrev("cadena invertida"); imprimira aditrevni anedac

str_repeat(cadena, veces) Devuelve la cadena repetida tantas veces como indica n. Ejemplo: ereg() Nota: Aunque ereg(), ereg_replace(), eregi() y eregi_replace() son realmente Funciones de Expresiones Regulares y no Funciones de Cadenas, es especialmente til incluirlas en este captulo. ereg busca dentro de una cadena las coincidencias especificadas. Si se desea buscar un rango, este debe separarse con el carcter "-". La bsqueda diferencia maysculas y minsculas. ereg devuelve un valor verdadero (1) si se encontr alguna coincidencia, o falso si no se encontraron coincidencias u ocurri algn error. Sintaxis: ereg (" [ coincidencias_a_buscar ] ", cadena en la que se va a buscar) En otras palabras, comprueba que en la cadena en la que se va a buscar exista lo especificado en el parmetro "coincidencias_a_buscar".
47

echo str_repeat("ja ", 3); imprimira ja ja ja

48

El primer parmetro (coincidencias_a_buscar) debe ir especificado entre ( [ ] ). El segundo parmetro (cadena en la que se va a buscar) debe ir entre comillas ( ) o sin ellas si es una variable, en cuyo caso debe llevar el signo $. Ejemplos: ereg( "[a-z]", cadena); ereg( "[A-Z]", $cadena); ereg( "[0-9]", $cadena); ereg( "[f . #]", cadena); (busca caracteres entre la "a" y la "z" minsculas) (busca caracteres entre la "A" y la "Z" maysculas) (busca caracteres entre el "0" y el "9" minsculas) (busca los caracteres "f" "." y "#")

Si ejecutramos uno de estos ejemplos en un script e imprimiramos el resultado con un echo, obtendramos lo siguiente: Ejemplo: echo ereg( "[a-z]", "cadena de prueba" ); imprimira 1 indicando verdadero echo ereg( "[a-z]", "1234567890" ); No imprimira resultado alguno, indicando falso La mejor forma de utilizar ereg es dentro de un ciclo que valide su resultado. Veamos un ejemplo con el ciclo if <? $cadena="Esta es una prueba de ereg"; if ( ereg("[g-j]",$cadena) ) { echo "La cadena contiene caracteres entre la 'g' y la 'j' minsculas"; } else { echo "La cadena no contiene caracteres entre la 'g' y la 'j' minsculas"; } ?> En el if se valida si el resultado que arroja ereg es verdadero o falso y de acuerdo con el, se decide que camino tomar. En nuestro ejemplo, se imprimir el texto que indica que la cadena si contiene caracteres que se encuentran en el rango validado, es decir entre la g y la j minsculas. La funcin eregi es casi igual a ereg. Su nica diferencia radica en que eregi no diferencia entre maysculas y minsculas. Veamos ahora los siguientes complementos: Primero que todo, hablemos de dos smbolos especiales: ^ y $ . Estos smbolos indican el inicio y el final de una cadena respectivamente. Ejemplo:

"^Los": corresponde a cualquier cadena que inicie con "Los"; "alumnos$": corresponde a cualquier cadena que finalice con "alumnos";

48

49

"^ojo$": corresponde a cualquier cadena que inicie y finalice con "ojo". Incluso la palabra "ojo"!

Si no se usa ninguno de los dos caracteres mencionados (^ o $) quiere decir que la coincidencia a validar puede estar en cualquier lugar de la cadena, no necesariamente en los extremos. Tenemos adems los smbolos *, +, y ?, los cuales indican el nmero de veces que un caracter o una secuencia de caracteres puede aparecer. Los caracteres significan lo siguiente: "cero o ms", "uno o ms", y "cero o ninguno." Ejemplos:

"ab*": corresponde a una cadena que tiene una "a" seguida por cero o ms "b". ("a", "ab", "abbb", etc.); "ab+": igual que la anterior, pero existe al menos una "b". ("ab", "abbb", etc.); "ab?": puede existir una "b" o no; "a?b+$": una posible "a" seguida por una o ms "b" finalizando con una cadena.

Se pueden adems utilizar lmites, los cuales se ponen dentro de llaves ( { } ) e indican rangos en el nmero de veces que se repite un caracter: "ab{2}": corresponde a una cadena que tiene una "a" seguida por exactamente dos "b". ("abb"); "ab{2,}": hay al menos dos "b". ("abb", "abbbb", etc.); "ab{3,5}": hay de tres a cinco "b". ("abbb", "abbbb", or "abbbbb"). Notemos que se debe siempre especificar el primer nmero de un rango. (ej, "{0,2}", no "{,2}"). Ahora, para cuantificar una secuencia de caracteres, pongmosla entre parntesis: "a(bc)*": corresponde a una cadena que tiene una "a" seguida por cero o ms copias de la secuencia "bc"; "a(bc){1,5}": de una a cinco copias de "bc." Existe adems el smbolo '|' que se comporta como el operador "o" (or): "hola|adis": corresponde a una cadena que tiene "hola" o "adis" en ella; "(b|cd)ef": corresponde a una cadena que tiene cualquiera: "bef" o "cdef"; "(a|b)*c": corresponde a una cadena que tiene una secuencia de "a" y "b" terminando en una "c"; Un punto ('.') sirve para un caracter cualquiera: "a.[0-9]": corresponde a una cadena que tiene una "a" seguida por un caracter cualquiera y un nmero; "^.{3}$": corresponde a una cadena que tiene exactamente 3 caracteres cualquiera. Expresiones entre llaves ( [ ] ) especifican qu caracteres se permiten en determinada posicin de una cadena: "[ab]": corresponde a una cadena que tiene una "a" o una "b" (igual a "a|b"); "[a-d]": corresponde a una cadena que tiene letras minsculas entre la 'a' y la 'd' (igual a "a|b|c|d" y a "[abcd]"); "^[a-zA-Z]": corresponde a una cadena que inicia con una letra entre "a" y "z" mayscula o minscula;
49

50

"[0-9]%": corresponde a una cadena que tiene un dgito antes de un signo "%"; ",[a-zA-Z0-9]$": corresponde a una cadena que finaliza en una coma seguida por un caracter alfanumrico.

Es posible adems validar caracteres no deseados: simplemente usamos un '^' como primer smbolo en una expresin entre corchetes (ej., "%[^a-zA-Z]%" corresponde a una cadena que tiene un caracter que no es una letra entre dos signos de porcentaje "%"). En el caso de que se desee validar los caracteres "^.[$()|*+?{\" se les debe anteponer un backslash ('\'). Para incluir un ']' en la lista, se debe poner como primer caracter (ej. %[^]]%). Para validar un '-', se debe poner como primer o segundo caracter. Un ejemplo prctico: Vamos a crear una validacin para una cadena que tiene un valor que corresponde a una cantidad de dinero. Una cantidad de dinero puede ser escrita de cuatro formas que podemos considerar aceptable: "10000.00" y "10,000.00", o sin centavos, "10000" y "10,000". Empecemos con:
^[1-9][0-9]*$

Esto valida cualquier nmero que no inicie con un 0. Pero tiene un problema: el "0" (cero pesos) no sera admitido. Solucin: ^(0|[1-9][0-9]*)$ Ahora admite un cero o cualquier nmero que no inicie con cero. Pero si es un nmero negativo? Podemos entonces permitir un signo menos antes del nmero: ^(0|-?[1-9][0-9]*)$ Esto significa: "un cero o un posible signo "menos" (-) y un nmero que no inicia con cero. Especifiquemos los dos decimales y el punto: ^[0-9]+(\.[0-9]{2})?$ Permitamos uno o dos decimales: ^[0-9]+(\.[0-9]{1,2})?$ Esto permite al usuario escribir uno o dos nmeros despus del punto. Ahora, para las comas que separan los miles podemos usar lo siguiente: ^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$

50

51
Pongamos las comas opcionales: ^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(\.[0-9]{1,2})?$ y listo!

Creo.

51

También podría gustarte