Wpii PHP V4 0 STC
Wpii PHP V4 0 STC
Wpii PHP V4 0 STC
Informacin Sobre la Publicacin Esta publicacin ha sido producida usando Microsoft Word 2000 y Microsoft PowerPoint 2000 para Windows y software Open Source como Apache 2.0.5.0 para Linux y PHP 5.0. Marcas Registradas IBM es una marca registrada por International Business Machines Corporation. Otras compaas, productos, y nombre de servicios pueden ser marcas registradas o marcas de servicios de otros. Trademarks of International Business Machines Corporation MySQL Linux Mozilla Firefox Apache
Microsoft Corporation
Sybase Inc.
Edicin Febrero 2008 La informacin contenida en este documento no ha sido sometida a ninguna prueba formal de IBM y es distribuida bsicamente como es" sin ninguna garanta ya sea expresa o implcita. El uso de esta informacin o la implementacin de cualquiera de estas tcnicas es responsabilidad del comprador y depender de la habilidad de ste para su evaluacin e integracin en el ambiente operacional del comprador. A pesar de que cada tema ha sido revisado por IBM para su exactitud en una situacin especfica, no hay garanta de obtener el mismo resultado o uno similar a ste en otra situacin. Los compradores que intenten adaptar estas tcnicas a sus propios ambientes lo hacen bajo su propio riesgo. Copyright International Business Machines Corporation, 2008. All rights reserved. Este documento no puede ser reproducido en su totalidad o en parte sin el previo permiso escrito de IBM. Instrucciones Especiales para la Impresin de este Curso: No elimine pginas en blanco que puedan aparecer al final de cada unidad entre unidades. Estas pginas fueron insertadas intencionalmente.
Contenido
Descripcin del Curso ....................................................................................... 5 Descripcin de Unidades................................................................................... 7 Volumen 1: Hypertext Preprocessor (PHP)...................................................... 9 Unidad 1: Fundamentos de PHP ..................................................................... 11
1. Qu es PHP? 2. Caractersticas de PHP 3. Funcionamiento de PHP 4. Arquitectura de PHP 5. Cmo Utilizar PHP? Resumen Unidad 1: Examen de Autoevaluacin Unidad 1: Respuestas al Examen de Autoevaluacin 1. Introduccin 2. Sintaxis Bsica de PHP 3. Variables 4. Constantes 5. Tipos de Datos 6. Operadores 7. Estructuras de Control Resumen Unidad 2: Examen de Autoevaluacin Unidad 2: Respuestas al Examen de Autoevaluacin 1. Introduccin 2. Funciones Definidas por el Usuario 3. Funciones Definidas por el Lenguaje 4. Extensiones en PHP Resumen Unidad 3: Examen de Autoevaluacin Unidad 3: Respuestas a Examen de Autoevaluacin Ejercicios de Laboratorio
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
110 110 111 115 122 142 143 146 148 150 150 151 153 156 159 164 165 167 170 172 172 182 186 187 188 191 193 195 210 211
ii
Unidad 6: Lab. Desarrollo de Sitios Web...................................................... 147 Unidad 7: Acceso a Base de Datos usando PHP......................................... 149
Unidad 8: Lab. Acceso a Bases de Datos .................................................... 169 Unidad 9: Introduccin a la Programacin Orientada a Objetos ............... 171
Unidad 9: Respuestas al Examen de Autoevaluacin Ejercicio de Laboratorio 1. Introduccin 2. Qu es XML? 3. Extensin de PHP para Trabajar con XML 4. PHPLib Resumen Unidad 11: Examen de Autoevaluacin Unidad 11: Respuestas a Examen de Autoevaluacin
Unidad 10: Lab. de Programacin Orientada a Objetos ............................. 215 Unidad 11: Extensiones PHP......................................................................... 219
iii Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Duracin
La duracin del curso es de 40 horas.
Propsito
Este curso ofrece a los estudiantes una visin general de PHP - Hypertext Preprocessor. Los estudiantes aprendern los Fundamentos, Elementos, Funciones y Extensiones del Lenguaje PHP. Tambin aprendern sobre el Desarrollo de sitios Web, Acceso a Base de Datos usando PHP, Programacin Orientada a Objetos y Extensin de PHP para trabajar con XML. El curso incorpora varias sesiones de laboratorios no evaluados, donde los estudiantes tendrn la posibilidad de ganar experiencia en la Programacin Web.
Audiencia
Estudiantes, profesionales y gente de negocios.
Prerrequisitos
Entender los conceptos bsicos acerca de HTML. Capacidad de crear pginas HTML. Entender los conceptos bsicos sobre lenguajes script. Experiencia prctica trabajando con HTML.
Estas habilidades pueden obtenerse al completar el curso CY710: Programacin Web Bsica.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Descripcin de Unidades
Volumen 1 : Hypertext Preprocessor
Unidad 1: Fundamentos de PHP
En esta unidad, se describe al lenguaje PHP, sus caractersticas y evolucin. Se discuten los beneficios y funcionalidades de PHP. Se explica cmo funciona un script hecho en PHP. Adicionalmente, se describe la arquitectura de PHP y se crea un script sencillo en este lenguaje.
Descripcin de Unidades 7
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
insertar, eliminar y actualizar registros. Se utiliza la extensin de PHP para acceder a bases de datos en MySQL.
Descripcin de Unidades
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Descripcin de Unidades 9
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
1. Qu es PHP?
PHP, acrnimo de "PHP: Hypertext Preprocessor", es un lenguaje interpretado de alto nivel que se ejecuta del lado del servidor. PHP est especialmente diseado para desarrollos web y puede ser embebido en pginas HTML. La mayor parte de su sintaxis es similar a C y Perl. La meta de este lenguaje es permitir a los desarrolladores web crear pginas dinmicas de una manera rpida y sencilla. PHP es "Open Source" (Cdigo Abierto).
1.1
En 1995 Rasmus Lerdorf, para controlar los accesos de los visitantes a su currculum online, cre un conjunto de scripts en Perl, al cual llam Personal Home Page Tools. Enseguida amigos y otros usuarios solicitaron su uso, de modo que en poco tiempo le solicitaron ms beneficios. Segn se requera ms funcionalidad, Rasmus Lerdorf fue escribiendo una implementacin en C mucho mayor, que era capaz de comunicarse con bases de datos y permita a los usuarios desarrollar sencillas aplicaciones web dinmicas. El autor decidi asociarse a otras personas y creo un nuevo lenguaje llamado PHP/FI (Personal Home Pages / Form Interpreter, traducido como Pginas Personales / Intrprete de Formularios). Lerdorf decidi liberar el cdigo fuente de PHP/FI para que cualquiera pudiese utilizarlo, reparar errores y mejorar el cdigo. PHP/FI inclua algunas de las funcionalidades bsicas de PHP tal y como se conoce hoy. Tena variables como las de Perl, interpretacin automtica de variables de formulario y sintaxis embebida HTML. En 1997, PHP/FI 2.0, la segunda versin de la implementacin en C, tuvo un seguimiento estimado de varios miles de usuarios en todo el mundo, con aproximadamente 50.000 dominios que informaron que lo tenan instalado, sumando alrededor del 1% de los dominios de Internet. PHP/FI 2.0 se liber oficialmente en Noviembre de 1997. 1.1.1 PHP 3 PHP 3.0 fue creado por Andi Gutmans y Zeev Suraski en 1997, quienes lo rescribieron completamente, pues PHP/FI 2.0 tena pocas posibilidades para desarrollar una aplicacin comercial que estaban realizando como parte de un proyecto universitario. Lerdorf, Gutmans y Zuraski decidieron cooperar y anunciar PHP 3.0 como el sucesor oficial de PHP/FI 2.0, interrumpiendo en su mayor parte el desarrollo que se llevaba a cabo de PHP/FI 2.0. El equipo de desarrollo decidi que el producto no deba mantener el nombre de Personal Home Page y lo rebautizaron como PHP: Hypertext Preprocessor (Preprocesador de Hipertexto PHP), siendo ste un acrnimo recurrente.
Unidad 1: Fundamentos de PHP Libro 1: PHP Hypertext Preprocessor 12
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Una de las caractersticas de PHP 3.0 era su extensibilidad, adems de proveer a los usuarios finales una infraestructura de soporte para muchas bases de datos, protocolos y APIs. Las caractersticas de extensibilidad de PHP 3.0 atrajeron a muchos programadores a colaborar con nuevos mdulos de extensin. Otra caracterstica introducida en PHP 3.0 fue el soporte de la sintaxis Orientada a Objetos. PHP 3.0 se liber oficialmente en Junio de 1998. A finales de 1998, PHP 3.0 estaba instalado en aproximadamente un 10% de los servidores web en Internet. 1.1.2 PHP 4 En 1998, poco despus del lanzamiento de PHP 3.0, Andi Gutmans y Zeev Suraski comenzaron a trabajar en el nuevo desarrollo del ncleo de PHP para mejorar la ejecucin de aplicaciones complejas y mejorar la modularidad del cdigo base de PHP, puesto que PHP 3.0 no estaba diseado para el mantenimiento eficiente de aplicaciones complejas. PHP 4.0 se bas en un nuevo motor, llamado 'Motor Zend' (combinacin de sus nombres, Zeev y Andi) o Zend Engine y se introdujo por primera vez a mediados de 1999. Actualmente el motor Zend es propiedad de Zend Technologies LTD. Zend se refiere al motor del lenguaje. El trmino PHP se refiere al lenguaje como tal. Juntos forman el Sistema PHP completo. Zend provee la infraestructura y los servicios a los mdulos de PHP e implementa la sintaxis del lenguaje. El motor Zend es un intrprete que analiza el cdigo de entrada, lo traduce y lo ejecuta. Adems proporciona algunas funciones bsicas. PHP implementa la mayor parte de la funcionalidad del lenguaje y acta como interfaz que se comunica con el servidor web. PHP 4.0 fue oficialmente liberado en Mayo de 2000. Adems de la mejora en el desempeo, PHP 4.0 inclua otras caractersticas adicionales como el soporte para la mayora de los servidores web, sesiones HTTP, buffers de salida, formas ms seguras de controlar las entradas de usuario y muchas nuevas construcciones de lenguaje. 1.1.3 PHP 5 PHP 5 fue liberado en Julio de 2004. Es principalmente manejado por su ncleo, el motor Zend 2.0. Posee un nuevo modelo de objetos y muchas otras caractersticas adicionales. El manejo de objetos en PHP ha sido completamente restructurado, permitiendo un mejor desempeo. En las versiones anteriores de PHP, los objetos eran manejados como tipos de datos primitivos. En el nuevo enfoque, los objetos pueden ser accedidos por referencia (a diferencia del antiguo modelo donde un objeto se referenciaba por valor cuando se pasaba como parmetro a un mtodo). Las nuevas caractersticas Orientadas a Objetos incluyen:
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Nueva sintaxis para definir el constructor y destructor de una clase. Mtodos finales (mtodos que no pueden ser sobrescritos). Clases finales (clases de las cuales ninguna otra clase puede heredar). Modificadores de acceso (pblico, protegido, privado) para atributos y mtodos. Clases y mtodos abstractos. Clases y mtodos estticos. Interfaces. Clonacin explcita de objetos, entre otros.
Otras caractersticas incluyen: Nueva administracin de memoria que permite trabajar eficientemente en entornos multihilos. Manejo mejorado de excepciones. Extensiones para Perl, lo que permite ejecutar scripts Perl, usar su modelo de objetos y funcionalidades nativas del lenguaje. Soporte para XML, Web Services y SOAP, entre otros.
1.1.4 ZEND 2.0 A continuacin se presentan las nuevas caractersticas del motor Zend 2.0, el ncleo de PHP 5, sobre su predecesor Zend 1.0. Nuevo modelo de objetos, muy similar a Java. Manejo de Excepciones. Implementa sentencias try, catch y throw. Adems del lanzamiento de excepciones a nivel de funciones de usuario, se puede configurar el motor de manera que las funciones internas lancen excepciones, en vez de retornar cdigos de error. Interfaz mejorada con las APIs Orientadas a Objetos de terceros. Mejora capacidad de comunicarse con APIs como la de Java y los componentes COM, lo cual permite una mejor integracin con otros modelos de objetos. Soporte a la Internacionalizacin. Mejora el soporte a conjuntos caracteres noWestern (no occidentales) y UNICODE.
De acuerdo a NetCraft (http://www.netcraft.com), PHP estaba implantado en ms de 1 milln de hosts en Noviembre de 1999, y ya para Octubre del 2003 estaba instalado en al menos 14 millones de hosts. Hoy, se estima que PHP es usado por cientos de miles de programadores y millones de sitios informan que lo tienen instalado, sumando ms del 20% de los dominios en Internet. Para ms informacin acerca de nuevos proyectos, desarrollos y actualizaciones de PHP y el motor Zend, visite sus sitios oficiales: www.php.net y www.zend.com.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
2. Caractersticas de PHP
PHP es un lenguaje de script del lado del servidor, embebido en HTML (server-side HTML embedded scripting language) y es de plataforma cruzada (cross plataform). Adems es un lenguaje de cdigo abierto (open source). Las caractersticas principales de PHP se explican a continuacin: Al ser PHP un lenguaje scripting del lado del servidor, se distingue de los lenguajes de script del lado del cliente, tales como JavaScript, porque el cdigo es ejecutado en el servidor y slo la respuesta se enva al cliente. Esto significa que cuando el resultado llega al cliente no se puede determinar el cdigo subyacente que lo gener. El trmino embebido en HTML, quiere decir que se puede incorporar cdigo PHP directamente dentro de cdigo HTML. El cdigo PHP puede ser incrustado dentro de cdigo HTML utilizando etiquetas especiales de inicio y fin (<?php ... ?> <?...?>). El hecho que trabaje en plataformas cruzadas, se refiere a que se puede utilizar en plataformas bajo distintos sistemas operativos (UNIX, LINUX, Windows (98,NT,2000 y XP), OS/2, Mac Os, etc) y servidores web (Apache, Microsoft Internet Information Server, Netscape, Oreilly Website Pro server, Xitami, OmniHTTPd y otros). Adems el cdigo PHP puede trasladarse desde un sistema a otro con muy pocos o ningn cambio. El hecho que PHP sea un lenguaje de cdigo abierto, significa que su distribucin es libre (se puede obtener sin pagar una licencia de software) y adems su cdigo fuente es accesible para todos los interesados. Muchas personas piensan que open source, simplemente significa gratis, pero ese es slo uno de sus beneficios.
Los proyectos Open Source, como es el caso de PHP, cuentan con una gran comunidad organizada de desarrolladores, que ofrece soporte tcnico a los usuarios, descubre y repara errores, actualiza continuamente el cdigo con extensiones que expanden las capacidades de PHP. Al tener acceso al cdigo fuente, los desarrolladores de PHP pueden incorporar nuevas funcionalidades, cooperar con nuevas extensiones, reportar bugs y proponer su correccin. Actualmente, un hecho que ha despertado suspicacias dentro de la Comunidad de Software Libre, es que el motor Zend, actual intrprete de PHP, posee un optimizador opcional de carcter comercial, el Zend Accelerator. Este optimizador almacena cdigo compilado en memoria, eliminando la sobrecarga de analizar e interpretar cdigo fuente por cada solicitud.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
orientada a objetos estn implementadas en PHP, la versin liberada ms recientemente, provee un Modelo de Objetos bastante completo. Soporte para una gran cantidad de bases de datos. Las siguientes son algunas de las bases de datos soportadas por PHP: PostgreSQL, MySQL, IBM DB2, Oracle (OCI7 y OCI8), Sybase, Direct MS-SQL, InterBase, Informix, Unix dbm, entre otras. Soporte para ODBC (Estndar Abierto de Conexin con Bases de Datos), lo que permite comunicarse con cualquier base de datos que soporte ese estndar. Soporte para comunicarse con otros servicios usando protocolos tales como: LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (en Windows) y muchos otros. PHP puede utilizar objetos Java de forma transparente como objetos PHP. La extensin de CORBA puede ser utilizada para acceder a objetos remotos. Posee caractersticas muy tiles para el procesamiento de texto, desde expresiones regulares extendidas tipo Perl hasta procesadores de documentos XML. Soporta los estndares SAX y DOM para procesar y acceder a documentos XML. Tambin se puede utilizar la extensin XSLT para transformar documentos XML.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
servidor Apache, tambin funciona bajo Windows en el Microsoft IIS, Netscape Server y otros. Adems de proveer todos los beneficios listados en la seccin 2.1 de la presente unidad. Muchas son las tecnologas utilizadas para lograr el procesamiento del lado del servidor (ASP, JSP, CGI, PHP) proporcionando dinamismo a sitios web y fortaleciendo la plataforma para el Comercio Electrnico. PHP actualmente est ganando terreno en estas reas.
3. Funcionamiento de PHP
PHP se diferencia de los scripts CGI, hechos en Perl o C, porque estos escriben el cdigo HTML a travs de comandos, mientras que PHP se puede incorporar directamente dentro de cdigo HTML utilizando etiquetas especiales de inicio y fin (<?php ... ?> <? ... ?>). A continuacin se muestra un script que se procesa del lado del servidor que est hecho en PHP.
Ejemplo de un script PHP: 1. 2. 3. 4. 5. 6. 7. 8. 9. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD><TITLE>Ejemplo sencillo de PHP</TITLE></HEAD> <BODY> <?php echo "<H1 align="center">Hola a todos!</H1>"; ?> </BODY> </HTML>
Como se puede observar, es posible combinar el cdigo en PHP con etiquetas HTML dentro de la misma pgina.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Existen tres formas de utilizar los scripts PHP: Scripts del lado del servidor: Representa el rea principal de desarrollo y uso de PHP. Para ejecutar scripts del lado del servidor se necesita el intrprete PHP (CGI o mdulo), un servidor web y un navegador. Es necesario que el servidor web se est ejecutando con PHP instalado. El resultado del programa PHP se puede obtener a travs del navegador, que se comunica con el servidor web. Scripts en la lnea de comandos: Puede crear un script PHP y ejecutarlo sin necesidad de tener un servidor web ni un navegador. Solamente necesita el intrprete PHP. Aplicaciones de interfaz grfica: Probablemente, PHP no sea el lenguaje ms apropiado para escribir aplicaciones grficas. Sin embargo, se pueden utilizar algunas caractersticas avanzadas en programas clientes, a travs de PHP GTK. PHP GTK es la solucin PHP para escribir aplicaciones GUI del lado del cliente, creado por Andrei Zmievski. PHP GTK est disponible como una extensin de PHP, no incorporada en la distribucin principal.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
4. Arquitectura de PHP
La Arquitectura de PHP, presentada en la Figura 1.2, se explica brevemente a continuacin: El Motor Zend (Zend Engine) es un componente autocontenido que funciona como el parser del lenguaje. Es un intrprete que analiza el cdigo de entrada, lo traduce y lo ejecuta. Adems proporciona algunas funciones bsicas del lenguaje. El ncleo PHP implementa la mayor parte de las funciones del lenguaje. La capa SAPI o Server Application Programming Interface, (traducido como Interfaz de Programacin de Aplicaciones del Servidor), son mdulos que proveen una interfaz para interactuar de forma transparente con distintos servidores web y otros servidores (por ejemplo, un servidor de servlets de Java). Esta capa provee una abstraccin del servidor web y simplifica la tarea de agregar soporte nativo para nuevos servidores. La capa SAPI logra que el funcionamiento de PHP sea independiente del servidor web que se est utilizando. SAPI incrementa la estabilidad de PHP y adems soporta servidores web multihilos. PHP actualmente posee implementaciones SAPI para Apache, Microsoft IIS, Netscape e iPlanet, AOLServer, CGI, Java, entre otros. Las extensiones PHP son mdulos de funciones autocontenidos. Muchas de las funciones, por ejemplo el soporte a MySQL, son provistas por una extensin. Las extensiones pueden ser enlazadas a PHP en tiempo de compilacin o pueden cargarse dinmicamente segn sea requerido. Muchas extensiones son opcionales.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
mysql
ODBC
MySQL
POP3
XML
COM
...
Extensiones
DB2
. . . XML
Navegador Web
Servidor Web
Una vez establecidos los conceptos, caractersticas, funcionamiento y la arquitectura de PHP, se presentan los elementos necesarios para poder crear y ejecutar scripts PHP.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
PHP posee mdulos directo de interface o SAPI (Server Application Programming Interface) para muchos servidores web, tales como Apache, Microsoft IIS, Netscape e iPlanet. Si PHP no soporta un mdulo SAPI para algn servidor web, siempre se puede utilizar como CGI. Esto significa que el servidor web se debe configurar para que utilice el ejecutable CGI de PHP en el procesamiento de los archivos .php. El uso de PHP como un ejecutable CGI es una opcin cuando por alguna razn no se pueda integrar PHP como mdulo SAPI del servidor web. Pero se debe ser cuidadoso al utilizar este tipo de instalacin. No es recomendable instalar PHP en modo CGI para servidores que estn en produccin porque la seguridad puede quedar comprometida. Es preferible utilizar PHP como mdulo SAPI.
Los archivos instalables para ambas formas de instalacin, estn disponibles en la seccin de downloads del sitio oficial de PHP, http://www.php.net/downloads.php. Con el asistente se instala la versin CGI de PHP, para IIS PWS, Xitami, Apache, etc. y configura al servidor web para que lo soporte. En este tipo de instalacin no se incluye ninguna de las extensiones externas de PHP. El asistente de instalacin para Windows es una forma sencilla de instalar PHP, pero no es la ms recomendable porque no soporta la configuracin automtica de extensiones. Tampoco es recomendable porque instala la versin CGI de PHP, la cual debe ser configurada cuidadosamente para que no comprometa la seguridad del servidor. En la instalacin manual de PHP el usuario lo instala directamente, paso a paso, es decir, debe copiar los recursos necesarios de PHP en el computador, editar archivos de configuracin (por ejemplo, el php.ini), copiar algunos archivos en ciertas ubicaciones particulares (por ejemplo, en la carpeta C:\WINNT\system32) y configurar el servidor web para que lo soporte. Aunque este tipo de instalacin puede resultar un poco complicada, es recomendable utilizarla porque de esta forma PHP se instala como mdulo SAPI, lo cual es ms
Libro 1: PHP Hypertext Preprocessor Unidad 1: Fundamentos de PHP 21
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
seguro que instalarlo modo CGI. Adems se incluyen muchas de las extensiones externas de PHP, y se pueden instalar de forma automtica.
10. /usr/local/apache2/bin/apachectl start 11. Crear archivo de nombre info.php haciendo uso del editor de texto de su preferencia, con el siguiente y nico contenido: <?php echo phpinfo(); ?> y guardarlo en la ruta /usr/local/apache2/htdocs/ (ver Figura 1.6).
Unidad 1: Fundamentos de PHP Libro 1: PHP Hypertext Preprocessor 22
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
12. Ejecutar el navegador y en la barra de direcciones colocar la ruta http://localhost/info.php, en caso de haber llevado a cabo una instalacin exitosa se desplegar una pgina con informacin acerca de la instalacin de Php.
Figura 1.7: Pantalla que se visualiza al instalar Php exitosamente Unidad 1: Fundamentos de PHP Libro 1: PHP Hypertext Preprocessor 24
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
echo "En 1995, <B>Rasmus Lerdorf</B> cre<B>PHP</B>, dandole el nombre inicial de <I>Personal Home Page Tools</I>. Luego, ese nombre fue cambiado a <I>PHP: Hypertext Preprocessor </I>\n<BR>.\n"; ?> </BODY> </HTML>
Nota: El uso de \n es para permitir que el cdigo generado est ms ordenado, de manera que cuando se visualice por Ver Cdigo Fuente, no quede todo en la misma lnea. Este cdigo se crea utilizando cualquier editor. El archivo debe ser guardado con la extensin .php (por ejemplo, hola.php). Este archivo debe colocarse dentro del directorio raz del servidor web que se est utilizando o dentro de un directorio que sea accesible para el servidor. La salida del cdigo se observa en la Figura 1.8. Nota: Si el Sistema Operativo utilizado es Linux, la ruta del directorio raz del servidor web es: /home/"nombre_usuario"/www, esta ubicacin hace referencia a /usr/local/apache2/htdocs/"usuario"/. All se deben guardar todos los archivos .php, que se quieran ejecutar. Para que el servidor Apache muestre pginas php, se debe hacer una solicitud al servidor web, colocando en la barra de direccin del navegador el siguiente URL: http://localhost/"usuario", esto mostrar el contenido de la carpeta donde se almacenan los cdigos php. En el ejemplo, para ubicar la pgina sera http://localhost/db2admin/. Tambin se pueden crear subdirectorios dentro del directorio raz. En este caso se accede al servidor de la siguiente forma: http://localhost/db2admin/codigos.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Cuando el servidor web recibe una solicitud para un archivo .php, pasa la solicitud al intrprete de PHP quien deja el cdigo HTML tal como est, pero cuando llega al cdigo PHP, procesa las instrucciones, generando como resultado cdigo HTML que es enviado de vuelta al navegador que hizo la solicitud. El cdigo HTML generado por hola.php, es el siguiente:
El cdigo HTML comienza aqu... 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD><TITLE> Primer Script PHP - Ejemplo </TITLE></HEAD> <BODY> <H1>Hola Mundo PHP!</H1> <HR> <!-- Aqu estamos en modo HTML --> En 1995, <B>Rasmus Lerdorf</B> cre <B>PHP</B>, dndole el nombre inicial de <I>Personal Home Page Tools</I>. Luego, ese nombre fue cambiado a <I>PHP: Hypertext Preprocessor</I>.<BR> </BODY> </HTML>
Como se observ en el Ejemplo 1.1, cuando se desea agregar comentarios en cdigo PHP, se utiliza el doble backslash (//) o el numeral (#) para comentar una lnea, y la combinacin de caracteres /* y */ para marcar el inicio y fin de un bloque de lneas comentadas. La funcin print() emite o da salida a una cadena de caracteres simple, mientras que la funcin echo " ... ", da salida a una o ms cadenas de caracteres. Las instrucciones en PHP finalizan con el carcter de fin de sentencia ; (punto y coma), como se pudo observar en el ejemplo anterior. En un script PHP puede alternarse cdigo HTML y PHP con la frecuencia que se necesite. Pero no se debe dejar todo el trabajo al intrprete de PHP. Es conveniente que el servidor web se dedique a procesar etiquetas HTML y slo alternar con el interpretador PHP para que haga el procesamiento dinmico que amerite. Un ejemplo de lo que no se debe hacer es lo siguiente:
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada Ejemplo 1.2 El cdigo PHP comienza aqu... 1. 2. 3. 4. 5. 6. 7. 8. <?php print("<HTML>\n");
print("<HEAD>\n"); print ("<TITLE> Primer Script PHP - Ejemplo 5. 1.2</TITLE>\n"); print("</HEAD>\n"); print("<BODY>\n"); print("<H1>Hola Mundo PHP!</H1>\n"); print("En 1995, <B>Rasmus Lerdorf</B> cre <B>PHP</B>, dndole el nombre inicial de <I>Personal Home Page Tools</I>. Luego, ese nombre fue cambiado a <I>PHP: Hypertext Preprocessor </I>\n<BR>.\n "); print("</BODY>\n"); print("</HTML>\n"); ?>
9. 10. 11.
El cdigo del Ejemplo 1.2 realiza exactamente lo que produce el cdigo HTML esttico, pero obliga a que el servidor web pida ms servicios del interpretador PHP, haciendo el procesamiento ineficiente. En esta unidad se han discutido los fundamentos de PHP. En la prxima unidad se estudiarn los elementos del lenguaje PHP que permitirn crear scripts PHP ms complejos.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de: Describir PHP, sus caractersticas y su evolucin. Discutir los beneficios y funcionalidades de PHP. Explicar cmo funciona un script hecho en PHP. Describir la arquitectura de PHP. Crear un script sencillo en PHP.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
7) Cules de las siguientes son ventajas de PHP? a) Se puede utilizar programacin procedimental o programacin orientada a objetos b) Es un lenguaje de cdigo abierto c) Se puede utilizar en plataformas bajo distintos sistemas operativos d) PHP fue especialmente diseado para trabajar en el entorno web 8) Cul de las siguientes etiquetas se pueden utilizar para incorporar cdigo PHP dentro de una pgina HTML? a) <!php !> b) <? ?> c) /* */ d) <?php ?> 9) Con PHP se puede desarrollar: a) Scripts del lado del servidor b) Scripts en la lnea de comandos c) Aplicaciones de interfaz grfica d) Java Applets 10) Cuando un servidor web recibe una solicitud para un archivo .php: a) El servidor web procesa directamente el archivo .php b) El servidor web pasa la solicitud al intrprete PHP c) El intrprete PHP procesa las instrucciones d) El servidor web genera como resultado cdigo HTML, que es enviado de vuelta al intrprete PHP que hizo la solicitud
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
1. Introduccin
En la Unidad 1 Fundamentos de PHP, se discuti acerca de las caractersticas bsicas de PHP, su arquitectura y funcionamiento. Tambin se discutieron los elementos necesarios para crear y ejecutar scripts PHP del lado del servidor. En esta unidad, se explicar la sintaxis de PHP y los elementos fundamentales que componen el lenguaje. Se comenzar con la sintaxis bsica de PHP.
Las dos primeras opciones estn siempre disponibles, pero la forma abreviada de las etiquetas PHP (<? ... ?>), debe configurarse en el archivo php.ini para que sean aceptadas por el intrprete. (Se coloca la directiva short_open_tag en On) Adicionalmente, se puede utilizar el estilo de etiquetas ASP: <% ... %>. Utilizar esta opcin no garantiza la portabilidad entre los distintos servidores. Tambin debe configurarse el php.ini para que sean aceptadas por el intrprete. (Se coloca la directiva asp_tags en On) Cuando se incorpora cdigo PHP dentro de cdigo XHTML o XML, es obligatorio utilizar la forma de las etiquetas <?php ... ?>. Se puede utilizar cualquier combinacin de los formatos de las etiquetas antes mencionadas dentro de cdigo PHP. Seguidamente, se presenta un ejemplo donde se muestra el uso de estas etiquetas.
Unidad 2: Elementos del Lenguaje PHP Libro 1: PHP Hypertext Preprocessor 34
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
En el siguiente ejemplo se observar que el cdigo contiene etiquetas HTML y cdigo PHP embebido, utilizando las distintas opciones para las etiquetas de inicio y fin de PHP.
El cdigo PHP comienza aqu... 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE> Etiquetas PHP - Ejemplo 2.1 </TITLE> </HEAD> <BODY> <?php echo ("Esta es la forma recomendada para delimitar cdigo PHP <BR>\n"); ?> <P> Aqu estamos en modo HTML </P> <? echo ("Esta es la forma abreviada de las etiquetas PHP<br>\n"); ?> <SCRIPT language="php"> echo("En este segmento utilizamos la etiqueta SCRIPT<BR>\n") </SCRIPT> <%= "Opcionalmente puedo utilizar las etiquetas ASP, pero esta opcin debe estar configurada en el php.ini<BR>\n " %> </BODY> </HTML>
Es recomendable utilizar el formato de etiquetas PHP completo (<?php ... ?>), pues se garantiza la compatibilidad entre las diferentes versiones de PHP para distintos servidores web. Adems no es necesario configurar ninguna opcin en el php.ini para que sean aceptadas por el intrprete.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
<?php print("hola a todos!"); ?> es equivalente a: <?php print("hola a todos!") ?> Tampoco se coloca punto y coma despus de la etiqueta de inicio PHP ( <?php <?) ni despus de la etiqueta de fin ( ?> ).
2.4 Comentarios
Existen tres formas de colocar comentarios dentro del cdigo PHP. Utilizar el doble backslash (//). Sirve para comentar una sola lnea. Utilizar la combinacin de de caracteres /* y */. Sirve para comentar varias lneas, formando un bloque de comentarios. Utilizar el carcter numeral ( # ). Sirve para comentar una nica lnea.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Utilizar la funcin echo(). Trabaja de forma similar a la funcin print(), pero usando esta funcin, se pueden escribir varias cadenas a la vez. Su sintaxis es: echo (S1[,S2 ... ]).
1. 2. 3. 4. 5. 6. <?php echo("<STRONG>Escribo el resultado con ECHO </STRONG><BR>\n"); ?> <?php echo "1era cadena ","2da cadena ","3era cadena"; ?>
Ntese que cuando se imprimen mltiples cadenas no se utilizan los parntesis. Utilizar las etiquetas <?= ?>. Esta es una forma abreviada de escribir una cadena de salida. Se utiliza de la siguiente manera: <?="Esto es equivalente a utilizar echo o print"?>
Es importante destacar que el uso de estas funciones no est limitado solamente a cadenas de caracteres. Con print(), echo() <?= ?>, se puede escribir cualquier expresin, de la siguiente forma: <?php print(EXPR); ?> <?php echo(EXPR); ?>. <?php echo EXPR1,EXPR2...; ?> <?=EXPR ?>.
Donde EXPR representa una expresin, que puede ser: Una variable que contenga un valor de cualquier tipo de dato. Una constante que contenga un valor de cualquier tipo de dato. El resultado de la evaluacin de una funcin. El resultado de la concatenacin de dos o ms expresiones.
A continuacin se presenta un ejemplo donde se pone en prctica todo lo mencionado hasta ahora.
Ejemplo 2.2
Este script PHP proporciona un ejemplo de lo que se ha contemplado en los apartados 2.1 al 2.5. Simplemente imprime algunos mensajes, incorpora comentarios y muestra el uso de las distintas etiquetas PHP.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada El cdigo PHP comienza aqu... 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE> Sintaxis Bsica de PHP - Ejemplo 2.2 </TITLE> </HEAD> <BODY> <? #Inicio del cdigo PHP. Estoy utilizando el tipo de comentario Shell. ?> <?="<H1>Sintaxis Bsica de PHP</H1>"?> <?="<HR>"?> <?php echo ("Esta instruccin finaliza con punto y coma pues le sigue otra instruccin...<BR>\n"); EcHo "Una FuNcIN no es sensible a "," MAYSCULAS y minsculas..."," Aqu finaliza el primer segmento. <BR>\n" //No es necesario finalizar con ; porque es la ltima instruccin de este segmento. ?> <HR><!-- Estoy en modo HTML--> <? /*Comienzo del segundo segmento de cdigo. (Puedo escribir varias lneas de comentario). Ahora usaremos la funcin print.*/ PRINT("Mostramos un nmero... <BR>\n"); $num=250; echo "NMERO: ",$num; ?> <HR> <SCRIPT language="php"> echo("En este segmento utilizamos la etiqueta SCRIPT<BR>\n") </SCRIPT> <HR> <?="<B>FIN!!</B>\n";?> </BODY> </HTML>
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Figura 2.1: Resultado de la ejecucin del ejemplo-2.2.php Fin del Ejemplo 2.2
Una vez discutidos los aspectos fundamentales de la sintaxis de PHP, se continuar con los elementos que componen el lenguaje, los cuales permitirn realizar programas en PHP ms completos. Se iniciar con las variables y constantes en PHP.
3. Variables
Una variable en PHP es un contenedor de datos temporal, es decir, slo existe y mantiene su valor mientras se ejecuta el script. Los datos que contienen las variables pueden ser modificados, guardados en archivos o bases de datos o enviados para que sean mostrados en el navegador; por ejemplo mediante el uso de la funcin print().
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
En PHP el nombre de las variables deben comenzar con el signo $ seguido con una letra en los rangos (A Z , a z) o el carcter underscore (_), luego puede tener una combinacin de letras en los rangos (A Z, a z), nmeros (0 9), el carcter especial under score (_) y los caracteres ASCII del 127 al 255 (extendidos). No est permitido el uso de espacios en blanco. Luego del carcter $, el nombre de una variable no puede comenzar con un nmero. Debe comenzar con el carcter _ o una letra (esto incluye los caracteres ASCII del 127 al 255). Los nombres de variables son sensibles a maysculas y minsculas. Por ejemplo, si se emplean las variables $VAR, $Var, $var y $vAr, estar utilizando cuatro variables distintas.
Es recomendable mantener una convencin en el uso de los nombres. Una convencin comn es nombrar a las variables en minsculas. A diferencia de otros lenguajes, PHP no necesita declarar los tipos de datos para las variables (PHP es dbilmente tipado). Tampoco se requiere inicializarlas antes de utilizarlas. Una variable en PHP existe y se define la primera vez que se le asigna un valor. Sin embargo, una variable tambin puede ser definida sin asignarle ningn valor (toma como valor NULL). Una variable puede contener cualquier tipo de dato. Por ejemplo, en un momento dado una variable puede contener una cadena de caracteres y ms adelante se le puede asignar un valor entero. A continuacin se presenta un ejemplo donde se muestran las caractersticas antes mencionadas.
Ejemplo 2.3
Este script PHP muestra cmo pueden nombrarse variables de forma correcta e incorrecta.
El cdigo PHP comienza aqu... 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE> Sintaxis Bsica de PHP - Ejemplo 2.3 </TITLE></HEAD> <BODY> <?php // * Usos vlidos de variables * $var1 = "Variable var1"; $VAR1 = "Variable VAR1, distinta a var1"; $_var1 = "Variable _var1"; Libro 1: PHP Hypertext Preprocessor 40
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 11. 12. 13. 14. 15. 16. 17.
$var1 = "Variable con caracteres ASCII extendidos"; // * Usos no vlidos de variables * var4 = "Se debe utilizar el carcter $ al inicio"; $5var = "El nombre de una variable no puede comenzar con un nmero"; ?> </BODY> </HTML>
Este script no se ejecuta correctamente, pues se incluyen lneas de cdigo que tienen errores de sintaxis. El ejemplo es slo para efectos ilustrativos.
Fin del Ejemplo 2.3
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
3.3.1. Asignacin de Valores Como se ha podido observar en los ejemplos presentados hasta ahora, se utiliza el operador = (igualdad), para asignarle valores a las variables. En el siguiente cdigo, se muestra cmo asignar valores a variables escalares.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ?> <?php $var; /* Se declara una variable sin ningn valor. Su contenido es NULL */ $var0 = NULL; // Explcitamente se le asigna NULL $var1 = "Variable 1"; // Se le asigna una cadena $var2 = 2005;// Se le asigna un nmero entero $var3 = 2150.75;// Se le asigna un punto flotante $var4 =(25*9+18); // Se le asigna el resultado de una expresin $var5=$var4; // Se le asigna el contenido de $var4
3.3.2. Asignacin de Valores por Referencia A partir de PHP 4 se tiene otra forma de asignar valores a las variables: La asignacin por referencia. Esto significa que la variable a la que se le asigna la referencia se convierte en un alias de" o "apunta a" la variable original asignada. Los cambios a la nueva variable afectan a la original y viceversa. Esto tambin significa que no se produce una copia de valores, por lo tanto la asignacin ocurre ms rpido. Para asignar una variable por referencia se antepone al nombre de la variable asignada el carcter ampersand (&).
1. 2. 3. 4. 5. 6. 7. 8. ?> <?php $origen = "Valor original <BR>"; $referencia = &$origen; $referencia = "Nuevo valor <BR>"; echo "Variable \$referencia: ",$referencia; echo "Variable \$origen: ", $origen; //En ambos casos se imprime Nuevo valor
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
En PHP, al igual que en Perl, y a diferencia de otros lenguajes de programacin, los arreglos no son uniformes, es decir, un mismo arreglo puede contener valores de distinto tipo en cada una de sus posiciones. En PHP los arreglos pueden trabajar como tablas hash (arreglos asociativos) o como arreglos indexados (vectores). Los arreglos pueden ser unidimensionales o multidimensionales. 3.4.1 Acceso a los Elementos de un Arreglo Los elementos de un arreglo se pueden acceder a travs de un ndice para los arreglos indexados, y a travs de una clave, en el caso de los arreglos asociativos o hashes. Acceso a un arreglo unidimensional: $var1 = $vector[i]; $vector[j] = $var1; //i y j representan las posiciones de los elementos en el arreglo $var1 = $hash["clave1"]; $hash["clave2"] = $var1; // "clave1" y "clave 2" representan las posiciones de los // elementos en el arreglo asociativo Acceso a un arreglo bidimensional: $matriz[i][j] = $var2; //i representa la fila y j la columna donde est el elemento Acceso a un arreglo multidimensional. $multi[i][j][k][l] = $var4; // Aqu tenemos un arreglo de cuatro dimensiones
3.4.2 Creacin de Arreglos Para crear un arreglo se pueden utilizar algunas de las opciones mostradas a continuacin. Crear un arreglo por asignacin de valores indicando un ndice: <?php # Crear un arreglo unidimensional por asignacin de valores $arreglo[0] = "primer valor"; $arreglo[1] = 2; $arreglo[2] = 3.5; $arrreglo[] = "ltimo valor"; # Crear un arreglo bidimensional por asignacin de valores
Libro 1: PHP Hypertext Preprocessor Unidad 2: Elementos del Lenguaje PHP 43
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
= = = =
El ndice de los arreglos comienza en cero (0) y cada posicin del arreglo puede contener cualquier valor, es decir, el contenido de un arreglo no est limitado a un slo tipo de dato. Cuando se asigna un valor a un arreglo usando ($arrreglo[]=$valor), el valor se agrega al final del arreglo. corchetes vacos
Tambin se puede crear arreglos asociativos. Esto se logra utilizando una clave en vez de un ndice. Crear un arreglo por asignacin de valores indicando una clave
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ?> <?php # Crear un arreglo asociativo unidimensional por asignacin de valores # $arreglo["primero"] = "primer valor"; $arreglo["segundo"] = "segundo valor"; $arreglo["tercero"] = "tercer valor"; echo $arreglo["segundo"]; //Se imprime segundo valor echo "<BR>"; # Crear un arreglo asociativo bidimensional por asignacin de valores # $matriz["cero"]["cero"] = 100; $matriz["cero"]["uno"] = 200; $matriz["uno"]["cero"] = 300; $matriz["uno"]["uno"] = 400; echo $matriz["uno"]["cero"]; // Se imprime 300
Tambin se puede mezclar ndices numricos y asociativos. Por ejemplo: $matriz[1]["cero"] = 100; $var1 = $matriz[1]["uno"]; Nota: Para poder recuperar el valor utilizando ndices numricos y asociativos, previamente los ndices del arreglo deben haber sido definidos de la misma forma. Si los ndices no estn definidos de la misma forma que cuando se cre el arreglo, al tratar de recuperar el elemento con esos ndices se genera un error. Crear un arreglo utilizando la funcin array() e ndices numricos.
1. <?php Libro 1: PHP Hypertext Preprocessor 44
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ?>
# Crear un arreglo unidimensional con array() # $arreglo1 = array(10,20,30,40,50); $arreglo2 = array("carro","moto","patn"); # Otra forma de crear un arreglo unidimensional con array() # $arreglo = array(0=>10,1=>20,2=>30,3=>40,4=>50); echo $arreglo[3]; //Imprime 40 echo "<BR>"; # Crea un arreglo bidimensional con array()# $matriz = array( 0=>array(0=>"00",1=>"01",2=>"02"), 1 => array(0=>"10",1=>"11",2=>"12"), 2 => array(0=>"20",1=>"21",2=>"22")); echo $matriz[1][2]; //Imprime 12
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Existen muchas funciones en PHP que permiten trabajar con arreglos. Estas funciones sern discutidas en la Unidad 3 Funciones y Extensiones PHP. A continuacin se discutir el alcance de las variables en PHP.
La variable $var estar disponible dentro del script incluido "archivo.php". Nota: En el ejemplo, la sentencia include(), sirve para incluir y evaluar un archivo especificado. 3.5.1 Variables Globales y Locales Dentro de las funciones definidas por el usuario se tiene el alcance local. Es decir, cualquier variable que se use dentro de una funcin est limitada al contexto local de la funcin.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. } miFuncion(); /* Se imprime 10*/ echo $var; /* Se imprime 1*/ ?> <?php $var = 1; /* variable con alcance global */ function miFuncion(){ $var = 10; echo $var; /* Se hace referencia a la variable local $var */ echo "<BR>";
A diferencia de lenguaje C, donde las variables globales estn disponibles automticamente dentro de la funcin, a menos que sean expresamente sobrescritas por una definicin local, en PHP las variables globales no estn disponibles
Unidad 2: Elementos del Lenguaje PHP Libro 1: PHP Hypertext Preprocessor 46
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
explcitamente dentro de la funcin. Esto es una forma de prevencin, porque se pueden cambiar los valores de las variables globales inadvertidamente. En PHP, las variables globales deben ser declaradas explcitamente como globales dentro de la funcin si van a ser utilizadas. Observe un ejemplo:
1. 2. 3. 4. 5. 6. 7. 8. 9. <?php $glob1 = 10; $glob2 = 20; function sumaGlob(){ global $glob1, $glob2; $glob2 = $glob1 + $glob2; } sumaGlob(); echo $glob2; // Se imprime 30 ?>
Al declarar $glob1 y $glob2 como globales dentro de la funcin, todas las referencias a tales variables se referirn a las globales. Un segundo mtodo para acceder a las variables globales es usando la variable predefinida de PHP $GLOBALS. El ejemplo anterior se puede escribir as:
1. 2. 3. 4. 5. 6. 7. 8. 9. <?php $glob1 = 10; $glob2 = 20; function sumaGlob(){ $GLOBALS["glob2"] = $GLOBALS["glob1"] + $GLOBALS["glob2"]; } sumaGlob(); echo $glob2; //Se imprime 30 ?>
La variable predefinida $GLOBALS es un arreglo asociativo que usa el nombre de la variable global como clave y el contenido de dicha variable como el valor del elemento del arreglo. $GLOBALS existe en cualquier alcance. Esto pasa porque $GLOBALS es una variable predefinida de PHP superglobal. Este concepto se estudiar en la Unidad 5 Desarrollo de Aplicaciones Web. 3.5.2 Variables Estticas Una variable esttica (static) existe slo en el alcance local de la funcin, pero no pierde su valor cuando la ejecucin sale del alcance local. Observe el siguiente ejemplo:
1. 2. 3. <?php function prueba(){ static $estatica = 0; Unidad 2: Elementos del Lenguaje PHP 47
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 4. 5. 6. 7. 8. 9. 10. 11. 12. echo $estatica; $estatica++; print $estatica; } prueba(); // se imprime 1 echo "<BR>"; prueba(); // se imprime 2 echo "<BR>"; prueba(); // se imprime 3 ?>
En este ejemplo, en cada llamada a la funcin prueba() la variable $estatica, contendr el valor que alcanz cuando sali de la invocacin anterior.
Aunque la revisin de todas las variables predefinidas de PHP, est fuera del alcance de este curso, una explicacin detallada acerca de algunas variables predefinidas la encontrar en la Unidad 5 Desarrollo de Aplicaciones Web.
4. Constantes
Una constante es un identificador que hace referencia a un valor simple. Como el nombre sugiere, este valor no puede variar durante la ejecucin del script. En PHP una constante es sensible a maysculas y minsculas, al igual que las variables. Por convencin, las constantes suelen declararse en maysculas. Estas son algunas de las reglas para nombrar constantes: No son precedidas por un smbolo de dlar ($). El nombre de las constantes debe comenzar con una letra en los rangos (A Z , a z), o el carcter underscore (_), seguido por una combinacin de letras, nmeros (0 9), underscore (_) y los caracteres ASCII del 127 al 255.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Slo pueden ser definidas usando la funcin define(), nunca por simple asignacin. Pueden ser definidas y accedidas sin tener en cuenta las reglas de alcance. El alcance de una constante es global, es decir, una vez definida se puede acceder desde cualquier punto del script. No pueden ser redefinidas o eliminadas despus de establecerse. Slo pueden contener valores escalares.
La funcin defined(), se utiliza para determinar si una constante ya est definida. Retorna TRUE, si est definida y False en caso contrario.
1. 2. 3. 4. 5. <?php define("MI_CONSTANTE", "Hola Mundo PHP!"); $t = defined("MI_CONSTANTE"); //retorna true $f = defined("OTRA_CONSTANTE"); // retorna false ?>
La revisin de todas las constantes predefinidas en PHP, est fuera del alcance de este curso.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
5. Tipos de Datos
En PHP el tipo de dato para una variable no se asigna explcitamente. Por el contrario, es asignado por PHP en tiempo de ejecucin, de acuerdo al valor que almacene la variable. Sin embargo, si se quiere obligar a que una variable se convierta a un tipo concreto, se puede utilizar la funcin settype(). Observe el siguiente segmento de cdigo:
1. 2. 3. 4. 5. <?php $var1 = "PHP es dbilmente tipado"; $result = settype ($var1, "string"); /* Retorna true si se puede establecer el tipo, false en caso contrario. */ ?>
La sintaxis para settype() es la siguiente: settype ($var, $tipo). Donde $tipo puede contener los siguientes valores: "string", "double", "array" y "object". "integer",
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
$bool = true; // $bool tiene el valor true $bool = false; // Ahora se le asigna el valor false
5.4 Cadenas
Las variables adquieren el tipo cadena si el valor asignado a la variable est encerrado entre comillas dobles (" ") o simples (' '). Las cadenas pueden contener cualquier valor.
1. 2. 3. 4. 5. ?> <?php $cadena1 = "Valor de cadena con comillas dobles"; echo "<BR>"; $cadena2 = 'Valor de cadena con comillas simples';
Si la cadena se delimita con comillas dobles (" "), las variables que estn dentro de la cadena sern expandidas o interpoladas. Si la cadena se delimita con comillas simples (' '), las variables que estn dentro de la cadena no sern expandidas o interpoladas. 5.4.1 Interpolacin de Cadena La interpolacin significa reemplazar un smbolo o variable con su contenido. En PHP, la interpolacin de cadena significa que siempre que una variable escalar sea colocada dentro de una cadena con comillas dobles, ser interpolada en la cadena, es decir, se mostrar su contenido, no el nombre de la variable. En otras palabras, cuando las comillas dobles (" ") se usan, PHP sabe que tiene que sustituir el valor de la variable cuando lo imprima. Observe el siguiente segmento de cdigo.
1. 2. 3. 4. ?> <?php $mensaje = "Bienvenido a IBM"; print "$mensaje";
El backslash ( \ ) se utiliza, del mismo modo que en C o Perl, como un carcter de escape. Si el backslash precede al $ dentro de las comillas dobles, ser interpretado como un $ en el literal y el valor de la variable no ser sustituido. Observe el siguiente segmento de cdigo.
1. 2. <?php $mensaje = "Bienvenido a IBM";
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Las secuencias de escape funcionan de la siguiente manera: Si se coloca el backslash ( \ ) delante de un carcter que tiene un significado o funcin especial en el lenguaje, el carcter en cuestin pierde sus atributos y es interpretado literalmente. Por ejemplo, si se coloca \$, el $ ya no ser interpretado como prefijo de variable sino como el carcter $. Por el contrario, si se antecede el backslash ( \ ) delante de un carcter que no tiene un significado particular en el lenguaje, el mencionado carcter adquiere una nueva caracterstica. Por ejemplo, si se antecede el backslash a la letra n, sta ser interpretada como el carcter de nueva lnea \n. En la Tabla 2.1 se muestran algunas secuencias de escape y su significado. Secuencia Significado
Nueva lnea Retorno de carro Tabulacin horizontal Barra invertida (backslash) Signo dlar Comilla doble Comilla simple
\n \r \t \\ \$ \" \'
5.4.2 No Interpolacin de Cadena Cuando una variable es colocada dentro de comillas simples, no ser interpolada en la cadena. Esto significa que la cadena ser interpretada literalmente. Entindase esto con un ejemplo.
1. 2. 3. <?php $mensaje = "Bienvenido a IBM"; print '$mensaje'; Libro 1: PHP Hypertext Preprocessor 52
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Observe otro ejemplo del uso de la barra invertida \. Suponga que se usan comillas simples para definir una cadena, pero la cadena tiene una comilla simple dentro de ella, por ejemplo: $mensaje = 'why don't you understand?'; PHP no ser capaz de interpretar esta cadena correctamente debido a que la comilla en "dont" sealar el fin de la cadena. Para superar esto se tiene que anteceder la comilla con un backslash '\'.
1. 2. 3. 4. ?> <?php $mensaje = 'Why don\'t you understand?'; print "$mensaje";
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 7. 8. 9. 10. 11. 12. 13. 14. ?> echo $var1 * $var2; //Imprime 2575 echo "<BR>"; $var3 = "casa"; $var4 = 20; echo $var3 + $var4; //Imprime 20 echo "<BR>"; echo $var3 * $var4; //Imprime 0
5.5.1 Conversin de Cadenas a Valores Numricos Cuando se hacen conversiones de cadenas a valores numricos, la cadena se evala como un punto flotante si contiene nmeros y alguno de los caracteres '.', 'e' 'E' (exponente). En caso de que contenga slo nmeros, se evala como un entero. El valor numrico se determina por la porcin inicial de la cadena. Si la cadena comienza con datos de numricos, este ser el valor usado. En caso contrario, el valor ser 0 (cero). Los datos numricos vlidos son el signo + (opcional), seguido por uno o ms dgitos (puede contener un punto decimal), seguido por un exponente (opcional). El exponente es una 'e' o una 'E' seguida por uno o ms dgitos. Con la funcin de PHP gettype($variable) se puede conocer el tipo de dato, que almacena una variable en un momento dado. Con la funcin de PHP var_dump($variable) adems de mostrar el tipo de dato de la variable, muestra el valor que contiene. Observe un ejemplo de conversin de tipos.
Ejemplo 2.4
En este script PHP, se le asigna valores de diferentes tipos a una serie de variables. Luego se hacen distintas operaciones con estas variables y se imprime el resultado. La funcin gettype()muestra el tipo de dato de las variables y de los resultados obtenidos.
El cdigo PHP comienza aqu... 1. 2. 3. 4. 5. 6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD><TITLE> Conversin de Tipos en PHP - Ejemplo 2.4 </TITLE> </HEAD> <BODY> <H1> Conversin de Tipos en PHP</H1> <HR> Libro 1: PHP Hypertext Preprocessor 54
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. <?php $cadena1="250"; $cadena2="solo letras"; $cadena3="10.075e2 y letras"; $flotante=2.5; $entero=20;
echo "El tipo de \$cadena1 es: ",gettype($cadena1),"<BR>\n"; echo "El tipo de \$cadena2 es: ",gettype($cadena2),"<BR>\n"; echo "El tipo de \$cadena3 es: ",gettype($cadena3),"<BR><BR>\n"; echo "\$cadena1*\$cadena2 => ", $cadena1*$cadena2, " / Tipo: ", gettype($cadena1*$cadena2), "<BR>\n"; echo "\$cadena1+\$cadena2 => ",$cadena1+$cadena2," / Tipo: ", gettype($cadena1+$cadena2), "<BR>\n"; echo "\$cadena1+\$cadena3 => ", $cadena1+$cadena3," / Tipo: ", gettype($cadena1+$cadena3), "<BR>\n"; echo "\$cadena2+\$cadena3 => ", $cadena2+$cadena3," / Tipo: ", gettype($cadena2+$cadena3), "<BR>\n"; echo "\$flotante+\$entero => ", $flotante+$entero," / Tipo: ", gettype($flotante+$entero), "<BR>\n"; echo "\$flotante*\$cadena3 => ", $flotante+$cadena3," / Tipo: ", gettype($flotante+$cadena3), "<BR>\n"; echo "\$entero*\$cadena1 => ", $entero*$cadena1," / Tipo: ", gettype($entero*$cadena1), "<BR>\n"; echo "\$flotante*\$cadena2 => ", $flotante*$cadena2," / Tipo: ", gettype($flotante+$cadena2), "<BR>\n"; ?> </BODY> </HTML>
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
5.5.2 Casting de Variables Otra forma de hacer conversin de tipos es hacer casting o moldear a una variable. Para hacer el casting de variables en PHP el nombre del tipo deseado se escribe entre parntesis antes de la variable a la que se pretende que adquiera un tipo especfico. $entero = 10; // $entero es un entero $flotante = (double)$entero; //$flotante es un punto flotante $cadena = (string)"Hola!"; //$cadena es un string Los casting de tipos permitidos se muestran en la Tabla 2.2. Tipo (int), (integer) (real), (double), (float) (string) (boolean) Conversin
Convierte a entero (integer) Convierte a doble (double) Convierte a cadena (string) Convierte a booleano (bool)
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada Convierte a array (array) Convierte a objeto (object) Tabla 2.2: Casting de Tipos
(array) (object)
PHP tambin ofrece un conjunto de funciones que permiten probar si una variable es de cierto tipo. Estas funciones se listan en la Tabla 2.3 Funcin is_array($var) is_bool($var) is_double($var) is_object($var) is_string($var) is_null($var) Descripcin
Retorna true si el argumento es un arreglo Retorna true si el argumento es un booleano Retorna true si el argumento es un punto flotante Retorna true si el argumento es un objeto Retorna true si el argumento es una cadena Retorna true si el argumento es nulo
6. Operadores
Los operadores son smbolos reservados del lenguaje de programacin para indicar que se va a realizar alguna operacin aritmtica, lgica, de comparacin, de incremento, decremento o combinaciones de las anteriores.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
+ * / %
$c $c $c $c $c
= = = = =
Ejemplo $a + $b $a - $b $a * $b $a / $b $a % $b
Operador
Descripcin
Igual. Se evala TRUE si $a es igual a $b Idntico. Se evala TRUE si $a es igual a $b y son del mismo tipo Diferente. Se evala TRUE si $a es distinto a $b Diferente. Se evala TRUE si $a es distinto a $b No Idntico. Se evala TRUE si $a no es igual a $b o no son del mismo tipo Mayor que. Se evala TRUE si $a es mayor que $b Menor que. Se evala TRUE si $a es menor que $b Mayor o igual que. Se evala TRUE si $a es mayor o igual que $b Menor o igual que. Se evala TRUE si $a es menor o igual que $b Tabla 2.5: Operadores de Comparacin
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Operador
Descripcin
Y lgico. Se evala TRUE si tanto $a como $b son TRUE. Y lgico. Se evala TRUE si tanto $a como $b son TRUE. O lgico. Se evala TRUE al menos una de las dos, $a o $b, es TRUE. O lgico. Se evala TRUE al menos una de las dos, $a o $b, es TRUE. NO. Se evala TRUE si $a es FALSE. Niega el valor de $a. O exclusivo. Se evala TRUE si alguna de las dos, $a o $b, es TRUE, pero no ambas. Tabla 2.6: Operadores Lgicos
Los operadores lgicos se pueden combinar en expresiones complejas con los operadores de comparacin. Bsicamente, se emplean para establecer las condiciones en estructuras de control, como ciclos y condicionales. Por ejemplo: $var1=100; $var2=300; $var3=400; (($var1>$var2) || ($var3>$var2)) // Retorna TRUE. (($var1>$var2) && ($var3>$var2)) // Retorna FALSE El uso de parntesis ( () ) ayuda a establecer la precedencia de los operadores, es decir, agrupando expresiones complejas se puede determinar en qu orden se evaluarn las sub-expresiones que la componen.
Descripcin
Pre-incremento. Aumenta el valor $a en 1 y luego retorna ese valor. Post-incremento. Retorna el valor de $a y luego aumenta su valor en 1. Pre-decremento. Reduce el valor de $a en 1 y luego retorna ese valor. Post-decremento. Retorna el valor de $a y luego reduce su valor en 1.
Ejemplo
$var1=5; $var2=++$var1; //$var2=6 y $var1=6 $var1=5; $var2=$var1++; //$var2=5 y $var1=6 $var1=5; $var2=--$var1;
//$var2=4 y $var1=4
$var1=5; $var2=$var1--;
//$var2=5 y $var1=4
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Descripcin
Ejemplo
$var1=20; $var1+=10; //$var1 = 30 $var1=20; $var1-=10; //$var1 = 10 $var1=20; $var1*=10; $var1=20; $var1/=10;
-= *= /= %= .=
//$var1=200 //$var1=2
$var1=20; $var1%=10; //$var1=0 $var1="Hola "; $var1.= "Mundo!"; //$var1= Hola Mundo!
7. Estructuras de Control
Cuando se est programando, es necesario en muchas ocasiones la repeticin de acciones sucesivas o la eleccin de una determinada secuencia, y no de otra, dependiendo de las condiciones especficas de la ejecucin. Un ejemplo, puede ser un script que ejecute un conjunto de acciones diferentes en funcin a la fecha, el mes o el da de la semana actual. Este tipo de acciones pueden ser llevadas a cabo gracias a un conjunto de estructuras de control presentes en la mayora de los lenguajes. Aqu se describirn algunas estructuras de control de PHP que resultan de evidente utilidad.
7.1 Condicional if
La construccin if permite la ejecucin condicional de un conjunto de instrucciones. Si se cumple la condicin se ejecutan las instrucciones, en caso contrario se contina con el resto del cdigo que est fuera del bloque if. La sintaxis es la siguiente: if (expr) sentencia; o tambin:
Unidad 2: Elementos del Lenguaje PHP Libro 1: PHP Hypertext Preprocessor 60
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
if (expr) { sentencia1; sentencia2; ... } Cuando se ejecuta una sola sentencia dentro del bloque if, no es necesario colocar los caracteres de inicio y fin de bloque, es decir, las llaves ({}).
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
sentencias; } elseif (expr3) { sentencias; } ... else { sentencias; } Observe el Ejemplo 2.5, donde se hace uso del condicional if...elseif.
Ejemplo 2.5
Este script PHP muestra el uso del condicional if ... elseif. Imprime un mensaje distinto dependiendo del idioma del navegador.
El cdigo PHP comienza aqu... 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Condicional if... elseif Ejemplo 2.5 </TITLE> </HEAD> <BODY> <H1>Detector de Idioma</H1> <HR> <? $espanol="Hola Mundo!"; $ingles="Hello World!"; $frances="Bonjour Monde!"; //Leer el idioma del navegador $idioma = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2); if ($idioma == "es") { print "<H2>".$espanol."</H2>"; } elseif ($idioma == "fr") { print "<H2>".$frances."</H2>"; } else { print "<H2>".$ingles."</H2>"; Libro 1: PHP Hypertext Preprocessor 62
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Se define una variable ($idioma) y, haciendo uso de la funcin substr(), se obtienen las dos primeras letras del cdigo correspondiente al idioma aceptado por el navegador, que se almacena en la variable predefinida del servidor $_SERVER[HTTP_ACCEPT_LANGUAGE]. Con el condicional if...elseif se comprueba el idioma del navegador, espaol (es), francs (fr) o cualquier otro idioma que no sea ninguno de estos y dependiendo del caso se imprime un mensaje. Nota: $_SERVER es una variable predefinida en PHP y representa las variables del servidor. $_SERVER es un arreglo asociativo que contiene informacin tal como cabeceras, rutas y ubicaciones de scripts.
Fin del Ejemplo 2.5
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
El valor del case puede ser cualquier expresin que se evale como un tipo simple, es decir, entero, punto flotante y cadena de texto. No se pueden usar en el case valores que representen arreglos ni objetos. Ahora observe el mismo ejemplo que se present anteriormente pero haciendo uso de la sentencia switch.
Ejemplo 2.6
Este script PHP muestra el uso de la sentencia switch. Imprime un mensaje distinto dependiendo del idioma del navegador.
El cdigo PHP comienza aqu...
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Sentencia switch Ejemplo 2.6 </TITLE></HEAD> <BODY> <H1>Detector de Idioma</H1> <HR> <? $espanol="Hola Mundo!"; $ingles="Hello World!"; $frances="Bonjour Monde!"; //Leemos del navegador cul es su idioma $idioma = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2); switch ($idioma){ case "es": print "<H2>".$espanol."</H2>"; break; case "fr": print "<H2>".$frances."</H2>"; break; default: print "<H2>".$ingles."</H2>"; } ?> </BODY> </HTML>
El cdigo PHP termina aqu Libro 1: PHP Hypertext Preprocessor Unidad 2: Elementos del Lenguaje PHP 65
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
El script ejemplo-2.6.php da el mismo resultado que el script ejemplo-2.5.php. El resultado se puede observar en la Figura 2.3.
Fin del Ejemplo 2.6
Los ciclos son utilizados para ejecutar un cdigo en forma repetitiva hasta que se cumpla o se mantenga una condicin. Es por ello, que los programas pueden aprovecharse de este principio para realizar una determinada secuencia de instrucciones un cierto nmero de veces.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Al inicio de cada iteracin, se evala expr_evaluacin . Si se evala como true, el bucle contina y las sentencias anidadas se ejecutan. Si se evala como false, la ejecucin del ciclo finaliza. Al final de cada iteracin, se ejecuta la expresin expr_cierre. Observe el siguiente segmento de cdigo: for ($i = 1; $i <= 10; $i++) { print $i; } //se imprimen los nmeros del 1 al 10. Cada una de las expresiones del ciclo for (expr_inicial; expr_evaluacin; expr_cierre), puede estar vaca, pero queda de parte del programador controlar la ejecucin del ciclo con otras sentencias, para que no se quede iterando indefinidamente. Ahora considere el Ejemplo 2.7 donde se muestra el uso de los ciclos while, do...while y for.
Ejemplo 2.7
El siguiente script PHP muestra el uso de los ciclos while, do...while y for. Genera tres mens de seleccin que contiene das, meses y aos respectivamente.
El cdigo PHP comienza aqu... 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. while ($dia<= 31) // * Se usa un ciclo while // * Se crea el men desplegable de los das del mes echo("<SELECT name=\"dia\">\n\t<OPTION>Elija uno...</OPTION>\n"); <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Ciclos while, do..while y for - Ejemplo 2.7</TITLE></HEAD> <BODY> <H1>Seleccin de da, mes y ao... </H1> <HR> <FORM name="f1"> <?php $dia=date("d"); // * Retorna el da actual print("<H2>Seleccione un da del mes:</H2>\n");
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. } echo("</SELECT >\n"); ?> </FORM> </BODY> </HTML> // * Se crea el men desplegable de los aos echo("<SELECT name=\"an\">\n\t<OPTION>Elija uno...</OPTION>\n"); $finAo = $ao + 30; { } echo("</SELECT >\n");
$mes=date("m"); // * Retorna el mes actual, en nmero. print("<H2>Seleccione un mes del ao:</H2>\n"); // * Se crea el men desplegable de los meses del ao echo("<SELECT name=\"mes\">\n\t<OPTION>Elija uno...</OPTION>\n"); do // * Se usa un ciclo do...while { print("\t<OPTION value=\"$mes\">$mes</OPTION>\n"); $mes++; } while ($mes<= 12); echo("</SELECT >\n"); $ao=date("Y"); // * Retorna el ao actual print("<H2>Seleccione un ao:</H2>\n");
for ($ao; $ao<= $finAo; $ao++) // * Se usa un ciclo for { print("\t<OPTION value=\"$ao\">$ao</OPTION>\n"); $ao++;
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
En el ejemplo, la funcin de PHP date(), se utiliza para retornar una fecha completa, ya sea el da, mes o ao, de acuerdo al parmetro recibido. La opcin d indica que se obtendr el da actual en formato numrico. La opcin m indica que se obtendr el mes actual en formato numrico. La opcin Y indica que se obtendr el ao actual en formato de cuatro cifras.
Fin del Ejemplo 2.7
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
} o tambin: foreach($arreglo as $clave => $valor) { sentencias; } En la primera opcin se toma cada uno de los elementos del arreglo y en cada iteracin se deja en la variable $valor. En la segunda opcin, se toma tanto el elemento como la clave (o ndice) y en cada iteracin se dejan en las variables $valor y $clave respectivamente. Ntese que no se requiere especificar una condicin de parada ni un incremento, pues el ciclo se detendr cuando se finalice el recorrido del arreglo y el acceso al siguiente elemento se hace de forma automtica. Observe el uso del ciclo foreach con un ejemplo.
Ejemplo 2.8
El siguiente script PHP muestra el uso del ciclo foreach. Genera una tabla que contiene algunos pases y sus respectivas monedas.
El cdigo PHP comienza aqu... 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Ciclo foreach - Ejemplo 2.8</TITLE> </HEAD> <BODY> <H1>Algunas monedas del mundo...</H1> <HR><BR> <? //Se crea un arreglo asociativo que contiene las monedas $monedas=array("Europa"=>"Euro", "USA"=>"Dolar", "Japn"=>"Yen", "Venezuela"=>"Bolvar", "Mxico"=>"Peso"); //Se crea la tabla donde se muestra la informacin echo "<TABLE bordercolor=blue border=1 align=center>\n", "<TR>\n","<TD>PAIS</TD><TD>MONEDA</TD>\n","</TR>\n";
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. foreach ($monedas as $pais=>$moneda) {
//Se agrega una nueva fila por cada moneda en el arreglo echo "<TR>\n","<TD>$pais</TD><TD>$moneda</TD>\n","</TR>\n"; } echo "</TABLE>"; ?> </BODY> </HTML>
Ya se han revisado la mayora de las estructuras de control que ofrece PHP. En la prxima unidad se estudiar un concepto fundamental para la programacin: Las Funciones.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de: Explicar la sintaxis bsica de PHP. Describir el uso de variables y constantes. Describir el uso de los operadores disponibles en PHP. Indicar los diferentes tipos de datos que posee PHP. Discutir las estructuras de control de PHP.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
3) Cules de las siguientes son reglas para nombrar variables en PHP? a) El nombre de las variables debe comenzar con el signo @ b) El nombre de las variables puede contener espacios en blanco c) El nombre de las variables deben comenzar con el signo $ d) Luego del prefijo de variable $, el nombre debe comenzar con una letra 4) En PHP se pueden definir arreglos asociativos o hashes a) Verdadero b) Falso 5) Al ejecutar el siguiente cdigo PHP, Qu se obtiene como resultado? <?php $paises = array("al"=>"Alemania", "bg"=>"Blgica", "ca"=>"Canad", "pr"=>"Puerto Rico", "ve"=>"Venezuela" ); ?> a) Se crea un arreglo asociativo bidimensional de 5 filas y 5 columnas b) Se crea un arreglo asociativo unidimensional de 5 posiciones
Libro 1: PHP Hypertext Preprocessor Unidad 2: Elementos del Lenguaje PHP 73
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
c) Se crea un arreglo asociativo bidimensional de 5 filas y 2 columnas d) Ocurre un error porque los arreglos no se pueden crear de esa forma 6) Cmo se pueden acceder las variables globales definidas en un script dentro de una funcin? a) Se pueden acceder directamente, colocando simplemente el nombre de la variable b) Se deben declarar explcitamente como globales dentro de la funcin, utilizando la clusula global, para poder utilizarlas c) Se pueden acceder utilizando la variable predefinida de PHP $GLOBALS d) Se pueden acceder utilizando la variable predefinida de PHP $_SERVER 7) Cules de las siguientes son estructuras de control en PHP? a) Switch($var) ... case("valor") b) if (condicionX)... elseif (condicionY) c) do ... while (condicionX) d) foreach($arreglo as $valor) 8) Al ejecutar el siguiente cdigo PHP, Qu se imprime en pantalla?
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. } ?> <?php $var='B' switch ($var) { case 'A': print "Ud. eligi la opcin A"; case 'B': print "Ud. eligi la opcin B"; case 'C': print "Ud. eligi la opcin C";
a) Ud. eligi la opcin B Ud. eligi la opcin C b) Ud. eligi la opcin B c) Ud. eligi la opcin A Ud. eligi la opcin B Ud eligi la opcin C
Unidad 2: Elementos del Lenguaje PHP Libro 1: PHP Hypertext Preprocessor 74
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
d) No se imprime nada 9) Cul de las siguientes es la forma correcta de declarar una constante en PHP? a) $PI = 3.1416 b) PI = 3.1416 c) define("PI", 3.1416) d) $var = defined(PI) 10) La funcin gettype($variable) permite conocer el tipo de dato, que almacena una variable en un momento dado, adems muestra el valor que contiene la variable. a) Verdadero b) Falso
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
1. Introduccin
En la Unidad 2 Elementos del Lenguaje PHP, se presentaron las bases para desarrollar programas usando PHP. Se discutieron conceptos tales como variables, constantes y se revisaron la mayora de las estructuras de control, condicionales y ciclos. En la presente unidad se estudiar un concepto fundamental para la programacin: Las Funciones. Las Funciones son un conjunto de instrucciones escritas en un lenguaje de programacin que permite realizar varias operaciones con datos suministrados en forma de argumentos a la funcin. Una funcin agrupa un conjunto de instrucciones, que pueden ser utilizadas en cualquier punto del programa, slo invocndolas a travs del nombre de la funcin. En PHP existe una gran divisin de las funciones que son: Funciones definidas por el usuario. Funciones propias de PHP.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
$condicion = true; /*Aqu todava no se puede llamar a funcionCondicional() porque an no existe. Pero podemos llamar a la funcin ultima(), aunque est definida al final del script. */ ultima(); if ($condicion) { function funcionCondicional() { echo "Si la condicin se cumple, se define la funcin!"; } } /* Ahora podemos llamar a funcionCondicional() slo si $condicion se cumple */ if ($condicion) funcioncondicional(); /* Definicin de la funcin ultima()*/ function ultima() { echo "Esta funcin existe desde el inicio del programa!"; } ?>
Las funciones condicionales slo se pueden utilizar si la condicin se cumple, porque slo en ese caso la funcin existe. En caso contrario no se puede invocar porque la funcin no existe.
Una funcin anidada no puede ser llamada sino hasta que se invoque primero la funcin padre, es decir, la funcin dentro de la cual ha sido declarada.
Libro 1: PHP Hypertext Preprocessor Unidad 3: Funciones y Extensiones PHP 79
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
?> 2.4.2 Parmetros por Referencia Cuando un parmetro se pasa por referencia, si el valor del parmetro cambia dentro de la funcin, este cambio se ve reflejado fuera de ella. Para pasar un parmetro por referencia se antepone un ampersand (&) al nombre del parmetro en la definicin de la funcin.
1. <?php
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 2. 3. 4. 5. 6. 7. 8. function agregar(&$parRef) { $parRef .= 'modificado!'; } $var = 'Valor inicial '; agregar($var); echo $var; ?>
2.4.3 Parmetros por Defecto En este caso la funcin recibe un valor por defecto si en la llamada a la funcin no se especifica ninguno. El valor por defecto debe ser constante, no una variable. Se debe colocar de ltimo en la secuencia de parmetros que no sean definidos por defecto.
1. 2. 3. 4. 5. 6. 7. } echo sumar30(20); // Muestra: 50 echo sumar30(50,50); // Muestra: 100 ?> <?php function sumar30($num1, $num2 = 30){ return "La suma es: ".($num1 + $num2);
2.4.4 Nmero de Parmetros Variables A partir de PHP4 las funciones pueden recibir un nmero variable de parmetros en las funciones definidas por los usuarios. Existen funciones incorporadas en PHP que permiten conocer cuntos parmetros han sido pasados a la funcin y obtener cada uno de ellos. func_num_args(): Retorna el nmero de parmetros pasados a la funcin definida por el usuario. func_num_args() generar un warning si es llamada fuera de la definicin de la funcin.
1. 2. 3. 4. 5. 6. 7. <?php function miFuncion() { $numargs = func_num_args(); echo "Nmero de parmetros: $numargs\n"; } miFuncion(10,30,20); ?> // Muestra: 'Nmero de parmetros: 3'
func_get_arg(pos): Retorna el parmetro que est en la posicin pos en la lista de parmetros de una funcin definida por el usuario. Los parmetros de la funcin se cuentan comenzando por la posicin cero (0). Generar un warning si es llamada fuera de la definicin de la funcin.
1. <?php Unidad 3: Funciones y Extensiones PHP 81
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
func_get_args(): Devuelve un arreglo en el cual cada elemento corresponde a un elemento de la lista de parmetros de la funcin. Generar un warning si es llamada fuera de la definicin de la funcin.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ?> } } miFuncion(10, 20, 30); /* Muestra Parmetro 1: 10 <?php function miFuncion() { $numargs = func_num_args(); $parametros = func_get_args(); for ($i = 0; $i < $numargs; $i++ ) { echo "Parmetro $i: ".$parametros[$i]."<br>\n";
Parmetro 2: 20 Parmetro 3: 30 */
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 4. 5. 6. else print "La funcin no est definida!"; ?>
Para conocer cuales funciones posee una extensin cargada en PHP, se puede utilizar la funcin get_extension_funcs(nombre_modulo), que retorna el nombre de todas las funciones que estn cargadas en un mdulo de extensin.
1. 2. 3. 4. 5. 6. <?php //Imprime el nombre de las funciones del mdulo de XML print_r(get_extension_funcs("xml")); //Imprime el nombre de las funciones del mdulo de mySQL print_r(get_extension_funcs("mysql")); ?>
Por la gran cantidad de funciones que posee PHP, no se har referencia a todas ellas, sino a las ms representativas. Para una informacin detallada sobre la sintaxis y el uso de las funciones PHP, consulte el Manual de referencia de PHP, disponible en: http://www.php.net/docs.php. A continuacin se presentan algunas funciones para trabajar con cadenas.
% b c d
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
u f o s x X
El argumento es tratado como un nmero entero, presenta el resultado como un nmero decimal sin signo. El argumento es tratado como un nmero real (double), presenta el resultado como nmero punto flotante. El argumento es tratado como un nmero entero, presenta el resultado como un nmero en base octal. El argumento es tratado como un string (cadena), presenta el resultado como un string(cadena). El argumento es tratado como un nmero entero, presenta el resultado como un nmero en base hexadecimal (con letras minsculas). El argumento es tratado como un nmero entero, presenta el resultado como un nmero en base hexadecimal (con letras maysculas). Tabla 3.1: Tabla de Caracteres para Formatos de Impresin
3.1.2 Funcin sprintf (formato[,argumentos]) Funciona como la funcin printf(), con la diferencia que printf() imprime el resultado, mientras que sprintf() slo cambia el formato de la variable y debe guardarse el valor en una nueva variable para poder utilizarla. Observe un ejemplo donde se emplea printf() y sprintf().
Ejemplo 3.1
El siguiente script PHP muestra el uso de las funciones printf y sprintf. Genera una tabla que contiene algunos pases y sus respectivas monedas.
El cdigo PHP comienza aqu... 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Funciones printf() y sprintf() - Ejemplo 3.1 </TITLE> </HEAD> <BODY> <H1>Funciones de Formato de Cadenas</H1> <HR> <?php $pago = 1200.1666667; print("<B>Valor de la variable \$pago sin formato $pago</B><BR>\n"); Libro 1: PHP Hypertext Preprocessor 84
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
print("<BR><H2>Funcin printf()</H2>\n"); print("<B> printf(\"%01.3f\", \$pago) imprime: </B>"); printf("<B>%01.3f</B><BR>",$pago); print("<B> printf(\"%06d\", \$pago) imprime: </B>"); printf("<B>%06d</B> <BR>",$pago); print("<BR><BR><H2>Funcin sprintf()</H2>"); $pago1=sprintf("%01.3f",$pago); print("<B> sprintf(\"%01.3f\", \$pago) cambia a: $pago1<BR></B>"); $pago2=sprintf("%06d",$pago); print("<B> sprintf(\"%06d\", \$pago) cambia a: $pago2</B>"); ?> </BODY> </HTML>
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
En el uso de printf() y sprintf() con el formato %1.3f, se indica que el nmero se formatea como un punto flotante con tres dgitos de precisin. El formato %06d tratar al nmero como un entero sin signo de seis dgitos.
Fin del Ejemplo 3.1
3.1.3 Funciones trim(str), ltrim(str), rtrim(str) y chop(str) La funcin trim() elimina los caracteres de espacio en blanco al inicio y al final de una cadena de caracteres.
1. 2. 3. 4. 5. 6. 7. 8. 9. <? function limpia_valores(&$valor) { $valor=trim($valor); } $frutas = array(' manzana','platano ', ' arandano '); var_dump($frutas); //Funcin que muestra el tipo de dato de la variable y el valor que contiene. echo "<br>"; array_walk($frutas, 'limpia_valores'); //array_walk aplica una funcin del usuario, en este caso limpia_valores, a cada elemento de una matriz. var_dump($frutas); ?>
10. 11.
La funcin ltrim() elimina los caracteres de espacio en blanco slo al inicio de la cadena. La funcin rtrim() y chop() elimina los caracteres de espacio en blanco al final de la cadena. Los caracteres de espacio en blanco incluyen: "\n", "\r", "\t", "\v" y "\0". 3.1.4 Funcin substr(str,comienzo,cantidad) Retorna parte o un substring de la cadena str. El parmetro comienzo, indica el punto de partida y cantidad indica el nmero de caracteres que se desean obtener. Existen algunas condiciones que se deben tomar en cuenta cuando se utiliza esta funcin: Si el carcter de partida es un nmero positivo, la funcin empezar a contar desde la parte izquierda de la cadena. Si el carcter de partida es un nmero negativo, la funcin empezar a contar desde la parte derecha de la cadena.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
/* Inicia en la posicin 0 a partir de la izquierda de la cadena y se toman 3 caracteres */ print $subcadena1. "<BR>"; // Imprime Car $subcadena2 = substr("Caracas", -4, 4); /* Inicia en la cuarta posicin a partir de la derecha de la cadena y se toman 4 caracteres */ print $subcadena2."<BR>"; // Imprime acas ?>
3.1.5 Funcin substr_count(cadena, subcadena) Retorna el nmero de veces que subcadena aparece en cadena.
1. 2. 3. <? print substr_count("Tres tristes tigres", "es"); //Imprime 3 ?>
3.1.7 Funciones strtolower(str) y strtoupper(str) La funcin strtolower(str), devuelve la cadena str en minsculas y la funcin strtoupper(str), retorna la cadena str en maysculas.
1. 2. 3. 4. 5. 6. 7. <? $minsculas = strtolower("VeNEzuEla") $maysculas = strtoupper("VeNEzuEla") print $minsculas; // Imprime venezuela echo "<BR>"; print $maysculas; // Imprime VENEZUELA ?>
3.1.8 Funciones implode(marca,arreglo) y explode(marca,cadena,lim) La funcin implode() devuelve una cadena que contiene una representacin de todos los elementos del arreglo en el mismo orden, pero con la cadena marca en medio de los mismos.
1. 2. <? $miArreglo = array("carro","moto","patn"); Unidad 3: Funciones y Extensiones PHP 87
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
La funcin explode() devuelve un arreglo de cadenas, cada una de las cuales es una subcadena de la cadena original. Esas subcadenas estn delimitadas dentro de la subcadena con una cadena que funciona como delimitador o marca. Si se especifica limite, el arreglo contendr un mximo de limite elementos con el ltimo conteniendo el resto de la cadena.
1. 2. 3. 4. 5. 6. <? $miCadena = "manzana-naranja-pera-limn"; $miArreglo = explode("-", $miCadena); /* Se crea un arreglo de 4 elementos */ print $miArreglo[1]; // Imprime naranja ?>
3.1.9 Funciones htmlentities(str) y urlencode(str) La funcin htmlentities(str) codifica los caracteres de la cadena str en caracteres HTML estndar. Por ejemplo, los caracteres < y > son codificados como < y > respectivamente. El uso de esta funcin permite que todos los caracteres que tengan una entidad equivalente en HTML sean cambiados a esas entidades.
1. 2. 3. 4. <? $cadenaHTML = htmlentities("<La nia se cay>"); echo $cadenaHTML; /* $cadenaHTML = <La niña se cayó>
sino se utiliza la funcin htmlentities(), la cadena debe escribirse de esta manera para poder visualizarse.*/
5. ?>
La ventaja de utilizar esta funcin es que algunos caracteres reservados en HTML podrn escribirse literalmente, sin necesidad de usar sus respectivas Referencias de Entidad. La funcin urlencode(str) permite codificar los caracteres de la cadena str en caracteres aceptados en la cadena de una direccin URL.
1. 2. 3. 4. 5. 6. 7. <? $nombre=urlencode("Mara Prez"); // $nombre = Mar%EDa+P%E9rez echo "<BR>"; $fecha_nac=urlencode("10/12/1980"); // $fecha_nac = 10%2F12%2F1980 ?> Libro 1: PHP Hypertext Preprocessor 88
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Descripcin
am o pm en minscula am o pm en mayscula Da del mes, numrico de dos dgitos Nombre del da en idioma ingles, tres letras Nombre completo del mes en idioma ingles Hora en el formato de 12 horas Hora en el formato de 24 horas Minutos en dos dgitos Da del mes sin cero inicial Nombre completo del da de la semana en ingls Nmero del mes de dos dgitos, con 0 inicial Nombre abreviado del mes en ingles Sufijo ordinal del da del mes Nmero de segundos transcurridos desde el 1 de enero de 1970, a las 00:00:00 horas Ao en el formato de dos dgitos Ao en el formato de cuatro dgitos Da del ao como el nmero de das a partir del primero de enero del ao 7:00 am
Ejemplo 7:00 PM
01, 02 ... 09 Mon... Sun January... December 01 ... 12 00 ... 23 00 ... 59 1, 2 ... 9 Monday ... Sunday 01, 02 ... 09 Jan, Feb ... Dec st, nd, rd, etc. 1st,2nd,3rd 45896321 98,99,00,01, etc 1998, 1999, 2000, 2001, etc. 190,192, ...., 365 o 366 si es ao bisiesto
A d D F h H i j l m M S U y Y z
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
3.2.2 Funcin time() Devuelve una marca de tiempo (timestamp UNIX), que es el nmero de segundos transcurridos desde el 1 de enero de 1970 a las 00:00:00 horas.
1. 2. 3. 4. <? $timeStamp = time(); print("El tiempo transcurrido en segundos es: $timeStamp"); ?>
Cuando se ejecute en el servidor el resultado debe ser el siguiente: El pago es: 1200000 El pago es: 30001 Pero si se desea considerar los decimales, despus del punto se debe especificar con el parmetro precision.
1. 2. 3. 4. 5. 6. <? $pago = round(1200000.1332 , 1); $bono = round(30000.58 , 1); print("El pago es: $pago"); echo "<BR>"; print("El bono es: $bono"); Libro 1: PHP Hypertext Preprocessor 90
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
El resultado ser el siguiente: El pago es: 1200000.1 El pago es: 30000.6 La funcin round() se divide en dos funciones: ceil() que redondea la parte entera al entero inmediato superior y la funcin floor() que redondea la parte decimal al entero inmediato inferior. 3.3.2 Funcin abs(valor) Permite hallar el valor absoluto de un nmero.
1. 2. 3. 4. 5. 6. 7. 8. 9. <? $positivo = 25; $negativo = -25; $pos = abs($positivo); $neg = abs($negativo); print("Valor absoluto de \$positivo: $pos"); echo "<BR>"; print("Valor absoluto de \$negativo: $neg"); ?>
El resultado es el siguiente: Valor absoluto de $positivo: 25 Valor absoluto de $negativo: 25 3.3.3 Funciones rand(lim_min,lim_max) y srand(expr) La funcin rand() devuelve un valor pseudoaleatorio que se encuentre entre los valores enteros lmite mnimo (lim_min) y lmite mximo (lim_max). La funcin srand() posee como entrada una expresin expr que proporciona la semilla para la generacin de un nmero pseudo-aleatorio. La expresin ms comnmente utilizada es un tiempo a nivel de microsegundos, utilizando la siguiente funcin: (double) microtime() * 1000000. Estas funciones permiten la generacin de nmeros aleatorios. Se debe ejecutar primero la funcin srand() y luego la funcin rand(), para garantizar una buena aleatoriedad.
1. 2. 3. <? srand((double) microtime() * 1000000); $numeroaleatorio = rand ();
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Se utiliza principalmente para arreglos asociativos, pero tambin se puede utilizar con arreglos indexados. Observe un ejemplo donde se hace uso de la funcin asort().
Ejemplo 3.2
El siguiente script imprime los valores de un arreglo tal como estn almacenados y luego los imprime una vez ordenados utilizando la funcin asort().
El cdigo PHP comienza aqu... 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Funciones de Arreglos - Ejemplo 3.2 </TITLE> </HEAD> <BODY bgcolor="#FFFFFF"> <? /* Se declara un arreglo con valores */ $carros = array ("d"=>"BMW", "b"=>"Mercedes Benz", "a"=>"Volskwagen", "c"=>"Lexus"); print "<H2>Antes de ordenar el arreglo:</H2>\n"; for (reset ($carros); $clave = key($carros); next($carros)) { echo $carros[$clave]."<BR>\n";
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. <HR>
<? print "<H2>Despus de ordenar el arreglo:</H2>\n"; asort ($carros); for (reset ($carros); $clave = key($carros); next($carros)) { echo $carros[$clave]."<BR>\n"; } ?> </BODY> </HTML>
En el cdigo del Ejemplo 3.2, se puede apreciar el uso de las funciones reset(), next() y key(). La funcin reset(arreglo) inicializa el ndice de un arreglo (lo coloca en 0).
Unidad 3: Funciones y Extensiones PHP 93
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
La funcin next(arreglo) avanza al siguiente elemento del arreglo. La funcin key() retorna el elemento ndice o clave de la posicin actual en el arreglo. La funcin count() retorna el nmero de elementos de un arreglo.
La funcin arsort() ordena un arreglo en orden inverso, de modo que los ndices mantengan su correlacin con los elementos a los que estn asociados. Ordena a partir de los valores. Se utiliza principalmente para arreglos asociativos, pero tambin se puede utilizar con arreglos indexados.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. <? $carros = array ("a"=>"BMW", "c"=>"Mercedes Benz", "b"=>"Volskwagen", "d"=>"Lexus"); print "Antes de ordenar el arreglo:<br>\n"; for (reset ($carros); $clave = key($carros); next($carros)) { echo $carros[$clave]."<BR>\n"; } print "Despus de ordenar el arreglo:<BR>\n"; arsort ($carros); for (reset ($carros); $clave = key($carros); next($carros)) { echo $carros[$clave]."<BR>\n"; } ?>
La salida es la siguiente: Antes de ordenar el arreglo: BMW Mercedes Benz Volskwagen Lexus Despus de ordenar el arreglo: Volskwagen Mercedes Benz Lexus BMW La funcin ksort() ordena un arreglo por la clave, manteniendo las correlaciones entre la clave y los datos.
1. 2. 3. <? $carros = array ("a"=>"BMW", "c"=>"Mercedes Benz", "b"=>"Volskwagen", "d"=>"Lexus"); print "Antes de ordenar el arreglo:<BR>\n"; Libro 1: PHP Hypertext Preprocessor 94
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
for (reset ($carros); $clave = key($carros); next($carros)) { echo $carros[$clave]."<BR>\n"; } print "Despus de ordenar el arreglo:<BR>\n"; ksort ($carros); for (reset ($carros); $clave = key($carros); next($carros)) { echo $carros[$clave]."<BR>\n"; } ?>
La salida es la siguiente: Antes de ordenar el arreglo: BMW Mercedes Benz Volskwagen Lexus Despus de ordenar el arreglo: Volskwagen Mercedes Benz Lexus BMW La funcin sort() ordena los elementos de un arreglo de menor a mayor. Puede ser que no se mantengan la correspondencia entre el ndice y la clave. La funcin rsort() ordena los elementos de un arreglo de mayor a menor. Puede ser que no se mantengan la correspondencia entre el ndice y la clave.
3.4.2 Funcin each() Devuelve el par clave/valor actual para un arreglo y avanza el cursor al siguiente elemento. Generalmente se usa dentro de estructuras iterativas.
1. 2. 3. 4. 5. <? $autos = array ("Volskwagen", "BMW", "Mercedes Benz", "Lexus"); $auto = each($autos); print_r($auto); ?>
La salida es la siguiente: Array ([1] => Volskwagen [value] => Volskwagen [0] => 0 [key] => 0)
Libro 1: PHP Hypertext Preprocessor Unidad 3: Funciones y Extensiones PHP 95
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
La funcin print_r(variable) imprime los valores de las variables en forma legible. Si recibe como parmetro un arreglo, los valores sern presentados en un formato que muestra las claves y los elementos.
3.4.3 Funcin list() Se utiliza para asignar una lista de variables en una sola operacin.
1. 2. 3. 4. 5. 6. } ?> <? $carros = array ("a"=>"BMW", "c"=>"Mercedes Benz", "b"=>"Volskwagen", "d"=>"Lexus"); while (list ($clave, $val) = each($carros)) { echo "$clave => $val <BR>";
La salida es la siguiente: a c b d => => => => BMW Mercedes Benz Volskwagen Lexus
Existe gran cantidad de funciones para trabajar con arreglos muy tiles, pero no es el propsito de este curso hacer una revisin exhaustiva de todas ellas. Para mayor informacin consulte el Manual de PHP, disponible en: http://www.php.net/docs.php. Ahora se estudiarn algunas funciones de PHP para trabajar con archivos.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Modo
Definicin
Ejemplo
"a"
Abre el archivo para agregar datos al final. No sobrescribe los fopen("arch.txt"," a"); datos que existen. Si el archivo no existe trata de crearlo. fopen("arch.txt", "a+"); fopen("arch.txt"," r"); fopen("arch.txt", "r+");
el archivo para lectura y agregacin. No sobrescribe los "a+" Abre datos que existen. Si el archivo no existe trata de crearlo.
"r"
Abre el archivo para slo lectura. (Esta opcin debe ser utilizada si se usa el protocolo HTTP para acceder el archivo)
el archivo para lectura y escritura. Los datos son "r+" Abre agregados desde el inicio del archivo
"w"
Abre el archivo para slo escritura. Si el archivo existe, todos fopen("arch.txt"," los datos sern eliminados y sustituidos por los nuevos datos w"); que se agreguen. Si el archivo no existe trata de crearlo.
Abre el archivo para lectura y escritura. Si el archivo existe, los datos sern eliminados y sustituidos por los nuevos fopen("arch.txt", "w+" todos "w+"); datos que se agreguen. Si el archivo no existe trata de crearlo. Tabla 3.3. Modos de Apertura de Archivos
Nota: Es importante destacar, que para trabajar con archivos, se deben incluir en la misma carpeta donde estn alojados los archivos .php en el servidor Apache. De no ser as, debe especificarse la ruta absoluta de la ubicacin del archivo. 3.5.2 Funcin fclose(punteroArch) Se utiliza para cerrar el archivo que fue previamente abierto con la funcin fopen(). El argumento punteroArch se refiere al apuntador al archivo abierto que se desea cerrar.
1. 2. 3. 4. 5. <? $archivo = "archivo.txt"; $fp=fopen($archivo, "w"); fclose($fp); ?>
3.5.3 Funcin filesize(punteroArch) Devuelve el tamao del archivo apuntado por punteroArch o FALSE en caso de error. 3.5.4 Funciones fputs(punteroArch) y fwrite(punteroArch) Mediante estas dos funciones se pueden escribir datos en el archivo especificado incluyendo caracteres de nueva lnea (\n).
Libro 1: PHP Hypertext Preprocessor Unidad 3: Funciones y Extensiones PHP 97
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 1. 2. 3. 4. 5. <? $archivo = fopen("archivo.txt", "a"); fputs($archivo,"Linea 1\n"); fwrite($archivo,"Linea 2\n"); ?>
3.5.5 Funcin fpassthru(punteroArch) Lee todo el contenido del archivo e imprime la salida en el navegador. Cuando se usa esta funcin, no es necesario usar la funcin fclose() ya que el archivo se cierra automticamente. Adems arroja el total de caracteres que posee el archivo.
1. 2. 3. 4. <? $archivo = fopen("archivo.txt","r"); $var = fpassthru($archivo); ?>
3.5.6 Funciones fgets(punteroArch,n) y fgetss(punteroArch,n) La funcin fgets() lee una cadena de caracteres de tamao n 1 del archivo especificado por punteroArch. Si la cantidad de bytes en el archivo es menor a n leer todo el archivo. Si no se especifica n, fgets() lee una cadena hasta que encuentra el carcter de nueva lnea. La funcin fgetss() es similar a la funcin fgets(), pero trata de eliminar cualquier etiqueta HTML o PHP que consiga en el archivo.
3.5.7 Funcin fread(punteroArch,n) Permite leer el contenido de un archivo como un texto del tamao indicado por n. La lectura acaba cuando n bytes se han ledo o se alcanza EOF, lo que ocurra primero. 3.5.8 Funcin feof(punteroArch) Esta funcin retorna TRUE si el apuntador al archivo (punteroArch) est en EOF (Fin de Archivo) o si ocurre un error. Si no ha ocurrido error y el apuntador al archivo no est al final, devuelve FALSE. A continuacin se mostrar un ejemplo donde se ponen en prctica las funciones de manipulacin de archivos, vistas hasta el momento. Nota: Para trabajar con archivos en Linux, es necesario cambiar la permisologa de los mismos, ya que por defecto este Sistema Operativo los crea con restriccin para Grupo y Otros. Se debe hacer lo siguiente: Botn derecho sobre el archivo, se selecciona Propiedades Permisos y se asigna: Propietario Lectura y escritura posibles Grupo Lectura y escritura posibles
Unidad 3: Funciones y Extensiones PHP Libro 1: PHP Hypertext Preprocessor 98
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
El siguiente script lee el contenido de un archivo y lo muestra en el navegador. Luego agrega en otro archivo nuevos datos y muestra el resultado en el navegador.
El cdigo PHP comienza aqu... 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Manejo de Archivos - Ejemplo 3.3 </TITLE></HEAD> <BODY> <H1>Manejo de Archivos</H1> <HR> <?php $archivo1="archivo1.txt"; /* Se abre el archivo archivo1.txt para slo lectura */ $fp1=fopen($archivo1,"r"); echo "<H2>Leyendo un archivo con la funcin fgets()</H2>\n"; /* Se lee del archivo lnea por lnea */ while (!feof($fp1)){ echo fgets($fp1)."<BR>\n"; } /* Se cierra el archivo */ fclose($fp1); echo "<BR>"; echo "<H2>Leyendo un archivo con la funcin fpassthru()</H2>\n"; echo "<B>Se agrega contenido y luego se imprimen los datos:</B>\n<BR><BR>\n"; $archivo2="archivo2.txt"; /* Se abre el archivo archivo2.txt para agregacin */ $fp2=fopen($archivo2,"a"); fwrite($fp2,"<BR>Y agrego una mas... <BR>"); fclose($fp2); /* Se cierra archivo2.txt */ /* Ahora se abre para lectura */ $fp2=fopen($archivo2,"r"); $num=fpassthru($fp2); /* No es necesario cerrar el archivo, porque fpassthru() cierra*/ ?> lo
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Se ha finalizado la discusin de los elementos fundamentales del lenguaje PHP y de algunas de las funciones incorporadas que posee. Ahora se culminar la unidad discutiendo cmo se incorporan mdulos de extensin a PHP.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
4. Extensiones en PHP
Los mdulos externos o extensiones en PHP permiten incorporar mayor funcionalidad a los programas desarrollados. Una extensin puede ofrecer la funcionalidad de interactuar con una base de datos especfica, convertir los elementos de XML en objetos y usarlos dentro del cdigo, utilizar los objetos de Java, etc. Una extensin especfica se puede cargar de forma automtica (o por defecto) o de forma dinmica. Para incorporar una extensin de forma automtica se debe modificar el archivo de configuracin php.ini. La extensin habilitada estar disponible por defecto para todos los scripts que se ejecuten. Para habilitar una extensin por defecto, se debe agregar la directiva extension, junto con el nombre de la extensin, dentro del archivo php.ini. Por ejemplo: extension=php_java.dll Para incorporar una extensin dinmicamente se debe hacer directamente desde el script PHP, utilizando la funcin dl(). La extensin se carga en tiempo de ejecucin y estar disponible slo para el script actual.
1. 2. 3. 4. ?> <?php dl('php_mysql.dll'); print "Se carg el mdulo de extensin de MySQL";
Adems de esto se deben configurar algunos parmetros propios de la extensin. En el php.ini estn cargadas por defecto muchas extensiones tiles. Una vez incorporada la extensin se puede hacer uso de sus funciones, como cualquier otra funcin de PHP. Por ejemplo:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. <?php // * Conectarse al servidor MySQL $idConn = mysql_connect("localhost:3306","mysqladmin","mysqladmin"); if ($idConn == 0) { echo "Fall la Conexin al Servidor MySQL!"; // * Obtener el error que ha ocurrido $sqlerror = mysql_error($idConn); echo"$sqlerror"; } else { echo "La Conexin a Base de Datos fue satisfactoria"; // * Seleccionar la BD Unidad 3: Funciones y Extensiones PHP 101
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
En el segmento de cdigo anterior se agreg la extensin para MySQL de forma dinmica. Luego se utilizaron algunas de las funciones disponibles, como mysql_connect(), mysql_select_db() y mysql_close(). En la Unidad 7 - Acceso a Base de Datos usando PHP se utilizar la extensin de PHP para trabajar con bases de datos MySQL. En la Unidad 9 Extensiones de PHP, se trabajar con algunas extensiones tiles. En las unidades siguientes se discutirn otros elementos que permitirn desarrollar aplicaciones PHP ms avanzadas.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de: Explicar y desarrollar las funciones definidas por el usuario. Describir y utilizar las funciones del lenguaje incorporadas en PHP. Indicar cmo se incorporan las extensiones en PHP.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
2) A partir de PHP4 las funciones se deben definir antes de referenciarse. a) Verdadero b) Falso 3) En PHP las funciones son sensibles a maysculas y minsculas a) Verdadero b) Falso 4) Cules de las siguientes sentencias son ciertas? a) En PHP no se pueden definir funciones anidadas. b) Una funcin anidada es aquella que se declara dentro del cuerpo de otra funcin. c) Una funcin anidada no puede ser llamada sino hasta que se invoque primero la funcin padre, es decir, la funcin dentro de la cual ha sido declarada d) Una funcin anidada se puede invocar en cualquier momento en cualquier punto del script. 5) Cules de las siguientes son formas de pasar parmetros a funciones en PHP? a) Paso de parmetros por valor b) Paso de parmetros por referencia c) Paso de parmetros por defecto d) Slo a y c 6) A partir de PHP4 las funciones pueden recibir un nmero variable de parmetros en las funciones definidas por los usuarios a) Verdadero b) Falso
Unidad 3: Funciones y Extensiones PHP Libro 1: PHP Hypertext Preprocessor 104
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
7) La funcin trim()elimina todos los caracteres de espacio en blanco de una cadena de caracteres a) Verdadero b) Falso 8) Al ejecutar la siguiente funcin:
<? $subcadena = substr("PHP es fcil de aprender", print $subcadena; ?> 11,11);
Se obtiene el siguiente resultado a) Se imprime: PHP es fcil b) Se imprime: PHP es fcil c) Se imprime: de aprender d) Se imprime: P es fcil 9) Cul de las siguientes sentencias son ciertas? a) La funcin explode() devuelve un arreglo de cadenas, cada una de las cuales es una subcadena de la cadena original b) La funcin time() retorna la hora actual del sistema c) La funcin reset(arreglo) inicializa el ndice de un arreglo (lo coloca en 0) d) La funcin count(arreglo) retorna el nmero de elementos de un arreglo 10) Qu se obtiene al ejecutar la siguiente funcin fopen(infophp.txt,w+)? a) Abre el archivo infophp.txt, para agregar datos al final. No sobrescribe los datos que estn en el archivo b) Abre el archivo infophp.txt, para slo lectura c) Abre el archivo infophp.txt, para slo escritura d) Abre el archivo infophp.txt para lectura y escritura. Si el archivo existe, todos los datos sern eliminados
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Libro 1: PHP Hypertext PreprocessorUnidad 4: Lab. de Elementos del Lenguaje y Funciones 107 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Ejercicios de Laboratorio
1) Escribir tres funciones en PHP y mostrar los resultados de la ejecucin de cada una. La primera funcin debe determinar si un nmero dado es par o impar La segunda funcin debe determinar si un nmero A es divisible por un nmero B. (Est funcin debe recibir como parmetros los nmeros A y B).
La tercera funcin debe recibir como entrada dos cadenas de caracteres, las debe invertir y luego concatenar. 2) Escriba un programa en PHP que genere los nmeros primos dentro de un rango de nmeros dado. Los nmeros generados deben ser almacenados en un arreglo asociativo. La clave para posicionar el elemento se denota como primoi, donde i, es el i-esimo nmero primo encontrado. Ejemplo:
Unidad 4: Lab. de Elementos del Lenguaje y FuncionesLibro 1: PHP Hypertext Preprocessor 108 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
1. Introduccin
En la Unidad 2 Elementos del Lenguaje PHP y en la Unidad 3 Funciones y Extensiones PHP, se establecieron los fundamentos para desarrollar scripts PHP. En esta unidad se estudiarn caractersticas ms avanzadas que permitirn desarrollar aplicaciones web ms avanzadas que faciliten el procesamiento de valores entrada dados por el usuario. Para ello, se aprender a trabajar con formularios y a recuperar la informacin enviada dentro de un script PHP. Tambin se establecern las bases para trabajar con sesiones de usuario. Antes de comenzar a discutir cmo desarrollar aplicaciones web con PHP, se definir lo que una aplicacin web representa.
2. Aplicaciones Web
Una aplicacin web es una aplicacin desarrollada usando tecnologas basadas en el entorno web como HTML, XML, JavaScript, PHP, ASP, CGI Perl, Java Servlets, etc. Las aplicaciones web utilizan otras aplicaciones como navegadores, servidores web y los protocolos de Internet para poder funcionar. Una aplicacin web tpicamente se conecta a otros servidores, como sistemas de bases de datos o sistemas de procesamiento de transacciones. Generalmente, tiene una arquitectura multicapas, lo cual significa que las aplicaciones son divididas en componentes. Las funcionalidades de los componentes de una aplicacin web son las siguientes: Navegador Web: Este es el componente en el lado del cliente. El navegador es una aplicacin usada para solicitar pginas web, recuperarlas y mostrar a los usuarios la informacin solicitada ya procesada. Servidor Web: Este componente acepta las solicitudes por pginas web hechas por el cliente y las entrega. El servidor web puede aceptar tambin solicitudes por scripts en el lado del servidor que generen pginas web dinmicas, por ejemplo scripts PHP. Recursos Externos: Las aplicaciones web necesitan acceder a la informacin o solicitar servicios de ms de una fuente. Un Sistema de Administracin de Base de Datos Relacional (RDBMS), un sistema de procesamiento de transacciones o cualquier otro recurso, que sea externo al servidor web, cae en esta categora.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Servidor Web Contenido ASP, (ASP, JSP, JSP PHP o Java Servlets Servlet) DBMS Recursos Externos
Monitor de Sistema de Procesamiento de Transacciones
Un formulario es el objeto de HTML fundamental para enviar datos por parte del cliente al servidor web. Un sitio o aplicacin web que requiera un mnimo de interaccin con el usuario debera utilizar formularios, pues este tiene distintos componentes que permiten ingresar datos, para luego ser procesados. Antes de comenzar la explicacin acerca del manejo de formularios en PHP, se tratarn algunas variables predefinidas en PHP, que sern de utilidad para ese propsito y para otros aspectos que se discutirn posteriormente. Como se mencion en la Unidad 2 Elementos del lenguaje PHP, PHP ofrece un conjunto de variables predefinidas. Se considerarn las que sean de mayor relevancia para el tratamiento de los tpicos que se presentarn en esta unidad.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Variable HTTP_POST: $_POST Variables de Solicitud: $_REQUEST Variables de Sesin: $_SESSION Variables Globales: $GLOBALS
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Se ha realizado un breve recorrido por las variables predefinidas que posee PHP. Cada una de ellas se emplear cuando sea conveniente. Pero antes se mostrar un ejemplo donde se utilice una variable de entorno. En el siguiente ejemplo se acceder a una de las variables predefinidas de PHP, $_SERVER.
Ejemplo 5.1
A travs del siguiente script, se accede a la variable predefinida $_SERVER y se muestra su contenido en el navegador.
El cdigo PHP comienza aqu... 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ?> </BODY> </HTML> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD><TITLE>Variables predefinidas - Ejemplo 5.1 </TITLE></HEAD> <BODY> <?php print "<H2>Variable \$_SERVER</H2>"; print "<HR>"; print "<B>El contenido de \$_SERVER es: </B><BR>"; foreach ($_SERVER as $clave=>$valor) { echo "$clave: $valor <BR>"; }
El resultado de la ejecucin de ejemplo-5.1.php se muestra en la Figura 5.2. En este ejemplo se observa parte del contenido de la variable predefinida $_SERVER.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
A continuacin se presenta una lista de los elementos que puede contener un formulario: Botones: button, reset y submit. Campos de texto: text, file, textarea, password y hidden. Componentes de seleccin: checkbox, radiobutton, select.
No se detallarn cada uno de estos elementos del formulario, pues para este curso se requiere conocimientos bsicos de HTML y es necesario que se manejen estos trminos.
Este mtodo enva los datos del formulario al script en el encabezado del mensaje de solicitud HTTP (HTTP Request). En este caso los datos son agregados al URL. Cuando se usa este mtodo una cadena de caracteres es visible en la barra de direcciones del navegador. <FORM name="form1" method="GET" action="miScript.php"> Nombre: <INPUT type="text" name="nombre"><BR> Edad: <INPUT type="text" name="edad">
<INPUT type="submit" value="enviar" name="enviar">
</FORM> Cuando se enva el formulario, despus del URL se agrega un signo de interrogacin ? seguido de una cadena que contiene los datos del formulario enviado. Esos sern los valores que procesar el script. Vea el siguiente ejemplo: http://localhost/miScript.php?nombre=Josefina+Prez&edad=25. Post
Este mtodo enva los datos del formulario al script a travs del cuerpo del mensaje de solicitud HTTP (HTTP Request). Los datos no son agregados al URL. <FORM name="form1" method="POST" action="miScript.php"> Nombre: <INPUT type="text" name="nombre"><br> Edad: <INPUT type="text" name="edad">
<INPUT type="submit" value="enviar" name="enviar">
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
http://localhost/miScript.php En PHP la manipulacin de datos del formulario es muy sencilla. Cuando se enva un formulario a un script PHP, las variables de dicho formulario pasan a estar automticamente disponibles para ese script.
</FORM> 4.2.1 Utilizando las Variables de Entorno $_POST, $_GET y $_REQUEST Si se usa el mtodo POST para enviar el formulario se emplea la variable $_POST y la variable $_REQUEST.
<?php print $_POST['nombre']; print $_POST['edad']; // * Tambin puede utilizar $nombre = $_REQUEST['nombre']; ?>
Si se usa el mtodo GET para enviar el formulario se emplea la variable $_GET y la variable $_REQUEST.
<?php $nombre = $_GET['nombre']; $edad = $_GET['edad']; // * Tambin puede utilizar $nombre = $_REQUEST['nombre']; ?>
Opcionalmente, se puede utilizar la funcin import_request_variables() para recuperar los valores del formulario.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
4.2.2 Funcin import_request_variables(tipo, prefijo) Esta funcin importa variables GET, POST o COOKIE. Es til si se ha deshabilitado la directiva register_globals en el php.ini, pero desea ver algunas variables en el contexto global. Cuando la directiva register_globals se encuentra activa, introducir en los scripts PHP todo tipo de variables, como por ejemplo los valores provenientes de formularios y tratar estas variables como si fuesen globales. Es altamente recomendable desactivarla, porque es muy probable que el script presente vulnerabilidades o ambigedades. En la funcin import_request_variables(tipo,prefijo) el parmetro tipo indica el tipo de variable que se desea recuperar. Puede usar los caracteres 'G', 'P' y 'C' para indicar GET, POST y COOKIE, respectivamente. Estos caracteres no son sensibles a maysculas o minsculas. Cualquier otra letra diferente a G, P o C es ignorada. El parmetro prefijo indica el prefijo fijo que tendr la variable. Para visualizar esta funcin, utilice el ejemplo anterior. <FORM name="form1" method="POST" action="miScript.php"> Nombre: <INPUT type="text" name="nombre"><BR> Edad: <INPUT type="text" name="edad">
<INPUT type="submit" value="enviar" name="enviar">
En el siguiente ejemplo se solicitan los datos del usuario en un formulario. Luego se muestran los datos ingresados y se le genera un id de usuario y una clave.
El cdigo HTML comienza aqu... 1. 2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> Libro 1: PHP Hypertext Preprocessor 118
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
<HEAD><TITLE>Uso de Formularios - Ejemplo-5.2</TITLE></HEAD> <BODY> <H2 align="center">Registro de Usuarios</H2> <HR> <H3>Regstrese y le enviamos su userid y su password</H3> <FORM method="post" action="ejemplo-5.2.php"> Nombre: <INPUT type=text name="nombres"><BR><BR> Apellido: <INPUT type=text name="apellidos"> <BR><BR> Email: <INPUT type=text name="email"><BR><BR> Direccin: <TEXTAREA name="direccion"></TEXTAREA> <BR><BR> <INPUT type="submit" name="enviar" value="ENVIAR"> </FORM> </BODY> </HTML>
El cdigo HTML termina aqu El cdigo PHP comienza aqu... 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD><TITLE>Uso de Formularios - Ejemplo 5.2</TITLE></HEAD> <BODY> <H2 align="center">Datos de Registro</H2> <HR> <?php function CrearUserId($nom, $apel){ $nombre=substr($nom, 0, 3); $apellido=substr($apel, 0, 3); $usuario=$nombre.$apellido; srand((double) microtime() * 1000000); // * Se selecciona un valor arbitrario $final= rand(0,1000); $usuario= $usuario.$final; print("<H3>Su USERID para ingresar a nuestro sitio Web es: $usuario</H3>"); }
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. function CrearPassword(){
$cadena= "Cadena para crear un password aleatorio"; $longitud= 8; // * Longitud de la clave /* Se realiza una funcin hash (dispersin) sobre la cadena de caracteres */ $cadena=md5($cadena); $longcadena=strlen($cadena); // * longitud de la // * se genera un valor random srand((double) microtime() * 1000000); // * Se selecciona un punto inicial arbitrario $inicio= rand(0,($longcadena - $longitud - 1)); $Password= substr($cadena, $inicio, $longitud); print("<H3>Su PASSWORD para ingresar a nuestro sitio es: $Password</H3>"); } ?> <?php $nombre=$_POST['nombres']; $apellido=$_POST['apellidos']; $email=$_POST['email']; $dir=$_POST['direccion']; echo "<B>Sus Nombres: </B>\n",$nombre,"<BR>\n"; echo "<B>Sus Apellidos: </B>\n",$apellido,"<BR>\n"; echo "<B>Su Email: </B>\n",$email,"<BR>\n"; echo "<B>Su Direccin: </B>\n",$dir,"<BR>\n"; echo "<HR>"; CrearUserId($nombre,$apellido); CrearPassword(); ?> </BODY> </HTML> Web cadena
En la Figura 5.3 se muestra el formulario HTML y en la Figura 5.4 se muestra el resultado de llamar a ejemplo-5.2.php, cuando se hace clic en el botn submit.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
En el ejemplo se utiliz la funcin md5(), es una funcin de dispersin que utiliza el algoritmo MD5 para generar un valor hash.
Fin del Ejemplo 5.2
5. Administracin de Sesiones
En una aplicacin web pueden haber muchos clientes que acceden a la aplicacin al mismo tiempo, haciendo solicitudes particulares y enviando datos propios. Dado que HTTP no guarda estados, el servidor no puede determinar en un momento dado quin hizo una solicitud y quin envo ciertos datos. Necesita de ayuda adicional para determinar quin, exactamente, est haciendo la solicitud. Para identificar a los usuarios, a cada cliente se le solicita que se presente a s mismo antes de hacer la solicitud al servidor y luego se debe llevar el control de los usuarios a partir de esa identificacin. Esto se conoce como Administracin de Sesin. Una sesin (session) es el perodo de tiempo que un usuario permanece en un sitio web, desde el instante en que ingresa al sitio web hasta que sale de ese sitio. La sesin contina mientras el usuario navega de pgina en pgina en el sitio web.
Unidad 5: Desarrollo de Sitios Web Libro 1: PHP Hypertext Preprocessor 122
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
En PHP existen varios mtodos para administrar las sesiones de usuarios. A continuacin se presentan dos de ellos: Cookies HTTP: $_COOKIE Variables de Sesin: $_SESSION
Las cookies creadas se guardan dentro del computador del cliente y pueden usarse despus. Por ejemplo, una cookie puede utilizarse para almacenar el nombre del usuario y enviar un mensaje de bienvenida ms adelante. El propietario de la cookie establece su tiempo de vida. Los valores cookies se almacenan en pares "nombre = valor", delimitados por un punto y coma (;). Se pueden crear nombres de variable y asignarles valores. Hay cuatro pares de valores que se almacenan en una cookie: El atributo domain: Se usa para identificar el servidor que ha creado la cookie, si se necesita usarla en una referencia futura. Determina el dominio de Internet al cual la cookie debe ser enviada. Por ejemplo, domain = www.ibm.com. El atributo path: Se usa para especificar el lugar dentro del sitio web donde la cookie debe enviarse de regreso al servidor. El atributo secure: Especifica que la cookie puede ser transmitida solamente si el canal de comunicacin con el host es seguro. El atributo expires: Especifica la fecha de expiracin y debe escribirse en un formato particular para ser reconocido universalmente, tal como: day,dd-mmyy, hh:mm:ss, GMT.
Un ejemplo de un encabezado de mensaje HTTP que lleva una cookie se muestra a continuacin: HTTP/1.1 200 OK Date: Mon, 25 Aug 2003 13:40:22 GMT Server: Apache/2.0.47 (Unix) PHP/5.0.0b1
Libro 1: PHP Hypertext Preprocessor Unidad 5: Desarrollo de Sitios Web 123
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
X-Powered-By: PHP/5.0.0b1 Set-Cookie: miCookie=JLS; expires=Thu, 25-Aug-2005 14:40:27 GMT; path=/; domain=ve.ibm.com Connection: close Content-Type: text/html; charset=ISO-8859-1 Las cookies en PHP, se almacenan en la variable predefinida $_COOKIE. Si se necesita recuperar el valor de una cookie se escribe lo siguiente: <? $miCookie = $_COOKIE[nombreCookie]; ?> Para crear una cookie en PHP se utiliza la funcin setcookie(). 5.1.1 Funcin setcookie(nombre,valor,expires,path,domain,secure) Define una cookie para ser enviada con el resto de la informacin del encabezado HTTP. Las cookies deben enviarse antes de mandar cualquier otra informacin de encabezado (esta es una restriccin de las cookies, no de PHP). Esto requiere que site las llamadas a esta funcin antes de cualquier etiqueta <html> o <head>. Todos los parmetros excepto nombre son opcionales. Si slo se especifica el parmetro nombre, la cookie con ese nombre no se almacenar en el cliente remoto. Tambin puede sustituir cualquier parmetro por una cadena de texto vaca ("") y saltar as ese parmetro. Los parmetros expire y secure son nmeros enteros si se quieren obviar utilice un cero (0). El parmetro expire es un entero de tiempo en formato GMT. El parmetro secure indica que la cookie se debe transmitir nica y exclusivamente sobre una conexin segura HTTPS. As se crea una cookie:
<? setcookie("idUs","Josefina",time()+82000,"/","",0); ?>
Y as se recupera su valor:
<? $miCookie = $_COOKIE["idUs"]; echo $miCookie; // Imprime: Josefina ?>
Si no se especifica el atributo expires, la cookie no se almacenar en el computador del cliente, pero existir mientras el navegador no se cierre o mientras no sea destruida explcitamente. Ahora observe un ejemplo donde se trabaje con cookies.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Ejemplo 5.3 En el siguiente ejemplo el usuario debe ingresar ciertos datos en un formulario. Una vez enviados, se realiza el registro del usuario guardando su informacin en cookies. Posteriormente, el usuario puede consultar la informacin que ingres, mediante la pgina misDatos.php. Para realizar este ejemplo se necesita una pgina html (ejemplo-5.3.html), que contiene el formulario para ingresar la informacin; tambin se requiere un script PHP (registro.php), que se encarga de almacenar los datos en las cookies. Finalmente, el script misDatos.php, obtiene la informacin almacenada en las cookies y la muestra en el navegador. El cdigo HTML comienza aqu...
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD><TITLE>Uso de las Cookies - Ejemplo 5.3</TITLE></HEAD> <BODY> <H2>Registro de Usuarios</H2> <HR> <FORM name="formDatos" action="registro.php" method="get"> Nombre: <INPUT type="text" name="nombre"><BR> Apellido: <INPUT type="text" name="apellido"><BR> Sexo: <INPUT type="radio" name="sexo" value="femenino"> femenino <INPUT type="radio" name="sexo" value="masculino"> masculino<BR> E-mail: <INPUT type="text" name="email"><BR><BR> Pasatiempos:<BR> <INPUT type="checkbox" name="pasatiempos[]" value="Leer">Leer<BR> <INPUT type="checkbox" name="pasatiempos[]" value="Video juegos"> Video juegos<BR> <INPUT type="checkbox" name="pasatiempos[]" value="Playa"> Playa<BR> <INPUT type="checkbox" name="pasatiempos[]" value="Cine"> Cine<BR><BR> Ciudades:<BR> <SELECT name = "ciudades[]" multiple> <OPTION>Londres</OPTION> <OPTION>Praga</OPTION> Unidad 5: Desarrollo de Sitios Web 125
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 26. 27. 28. 29. 30. 31. 32. 33. <OPTION>New York</OPTION> <OPTION>Paris</OPTION> <OPTION>Barcelona</OPTION> </SELECT><BR><BR>
El cdigo HTML termina aqu El cdigo anterior corresponde a la pgina ejemplo-5.3.html. Note que los controles del formulario tales como el checkbox y select, pueden contener mltiples valores. Para que el script PHP pueda acceder a todos los valores que almacenan esos controles, se debe especificar el nombre de estos como si fuesen arreglos (pasatiempos[] y ciudades[], respectivamente). De esta forma las variables de entorno utilizadas para obtener los datos enviados, ya sea $_POST, $_GET o $_REQUEST, almacenarn un arreglo con todos los valores que corresponden, y no un nico valor. A continuacin se muestra el cdigo para el script registro.php. El cdigo PHP inicia aqu...
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Unidad 5: Desarrollo de Sitios Web Libro 1: PHP Hypertext Preprocessor 126 } if (array_key_exists('apellido', $_GET)) { $nombre.=" ".$_GET["apellido"]; <?php // * Inicializando las variables a utilizar $nombre=NULL; $sexo=NULL; $email=NULL; $pasatiempos=NULL; $ciudades=NULL; // * Se verifica si existen los campos dentro de la variable $_GET if (array_key_exists('nombre', $_GET)) { $nombre=$_GET["nombre"]; }
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. } } if (array_key_exists('email', $_GET)) { $email=$_GET["email"]; if (array_key_exists('sexo', $_GET)) { $sexo=$_GET["sexo"]; }
} // * Se recorre el arreglo de pasatiempos para tomar cada uno if (array_key_exists('pasatiempos', $_GET)) { $pasatiempos=$_GET["pasatiempos"][0]; for ($i=1; $i<count($_GET["pasatiempos"]); $i++) { $pasatiempos.=",".$_GET["pasatiempos"][$i]; } // * Se recorre el arreglo de ciudades para tomar cada una if (array_key_exists('ciudades', $_GET)) { $ciudades=$_GET["ciudades"][0]; for ($i=1; $i<count($_GET["ciudades"]); $i++) { $ciudades.=",".$_GET["ciudades"][$i]; } // * Se crean las cookies con la informacin del usuario setcookie("nombre", "$nombre",time()+82000,"/","",0); setcookie("sexo", "$sexo",time()+82000,"/","",0); setcookie("email", "$email",time()+82000,"/","",0); setcookie("pasatiempos","$pasatiempos",time()+82000,"/","",0 ); setcookie("ciudades","$ciudades",time()+82000,"/","",0); ?> <HTML> <HEAD><TITLE>Uso de las Cookies - Ejemplo 5.3</TITLE></HEAD> <BODY> <H2 align="center">Informacin Registrada!</H2> <HR>
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. <?php
print ("<TABLE bordercolor=blue border=1 align=center>\n"); print("<TR><TD>Nombre:</TD><TD>$nombre</TD></TR>"); print("<TR><TD>Sexo:</TD><TD>$sexo</TD></TR>"); print("<TR><TD>Email:</TD><TD>$email</TD></TR>"); print("<TR><TD>Pasatiempos:</TD><TD>$pasatiempos</TD></TR>") ; print("<TR><TD>Ciudades:</TD><TD>$ciudades</TD></TR>"); print ("</TABLE>"); print ("<HR>"); print("Puede consultar la informacin enviada en: http://localhost/misDatos.php"); ?> </BODY> </HTML>
El cdigo PHP termina aqu Observe en el cdigo anterior, como se accede a las variables pasatiempos y ciudades. A continuacin se muestra el cdigo para el script misDatos.php. Este script se ejecuta luego de que se ha registrado la informacin para el usuario, cuando se presiona el botn enviar. Se recomienda cerrar la ventana del navegador, abrir una nueva ventana del navegador y ejecutar este script directamente, para que compruebe que la informacin del usuario an persiste y se recupera de las cookies. El cdigo PHP comienza aqu...
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. <?php $nombre=$_COOKIE['nombre']; $sexo=$_COOKIE['sexo']; $email=$_COOKIE['email']; $pasatiempos=$_COOKIE['pasatiempos']; $ciudades=$_COOKIE['ciudades']; ?> <HTML> <HEAD><TITLE>Uso de las Cookies - Ejemplo 5.3</TITLE></HEAD> <BODY> <H2 align="center">Bienvenido(a)! Sr(a) <?=$nombre?></H2> <HR> <H3 align="center">Esta es la informacin registrada:</H3> Libro 1: PHP Hypertext Preprocessor 128
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. <?php
print ("<TABLE bordercolor=blue border=1 align=center>\n"); print("<TR><TD>Nombre:</TD><TD>$nombre</TD></TR>"); print("<TR><TD>Sexo:</TD><TD>$sexo</TD></TR>"); print("<TR><TD>Email:</TD><TD>$email</TD></TR>"); print("<TR><TD>Pasatiempo:</TD><TD>$pasatiempos</TD></TR>"); print("<TR><TD>Ciudades:</TD><TD>$ciudades</TD></TR>"); print ("</TABLE>"); print ("<HR>"); print("Gracias por consultar su informacin!"); ?> </BODY> </HTML>
El cdigo PHP termina aqu El resultado de la ejecucin de ejemplo-5.3.html, se muestra en la Figura 5.5. Luego se muestra el resultado de registro.php en la Figura 5.6. Y por ltimo, se muestra el resultado de misDatos.php, en la Figura 5.7.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Cuando el usuario completa la informacin y presiona el botn enviar, se ejecuta registro.php. el resultado se observa en la siguiente imagen.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
El soporte a las sesiones permite registrar un nmero arbitrario de variables de sesin que se conservarn en las subsiguientes peticiones. Cuando un visitante accede a un sitio web, PHP comprobar automticamente si session.auto_start est puesto a 1 (session.auto_start es una directiva que se encuentra en el archivo php.ini) o cuando se especifique explcitamente utilizando la funcin session_start() o implcitamente a travs de la funcin session_register(). Si existe un "session id" (PHPSESSID = b3228ce5e66834bc2ced42a89938796.) especfico con la solicitud del cliente, se pueden recuperar las variables que se haban guardado anteriormente. Si la directiva sesion.auto_start se coloca en 1 en el php.ini, cada vez que un cliente acceda a un script en el servidor por primera vez, automticamente se crear una sesin que genera un id de sesin. Por eso es conveniente iniciarlas dentro de los scripts PHP, slo cuando se necesite. Para ello se utiliza la funcin session_start(). 5.2.1 Funcin session_start() Crea una sesin (o la contina basndose en un session id ya generado). Esta funcin debe llamarse antes de mandar cualquier otra informacin de encabezado (esta es una restriccin de las cookies, no de PHP). Esto requiere que site las llamadas a esta funcin antes de cualquier etiqueta <HTML> o <HEAD>.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. <?php session_start(); ?> <HTML> <HEAD> <TITLE>Creando una Sesin</TITLE> </HEAD> <BODY> <?php $ID = session_id(); //retorna el id de sesin creado print "ID de la sesin: ".$ID; ?> </BODY> </HTML>
La funcin session_id() devuelve el session id de la sesin actual. Si se le pasa como parmetro un id, reemplazar el session id actual.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
5.2.2 Crear una Variable de Sesin Las variables de sesin se pueden crear de dos formas: Directamente en el arreglo asociativo (variable predefinida) $_SESSION
5.2.3 Acceder a una Variable de Sesin Una variable de sesin se puede recuperar de la siguiente forma:
<? $uid = $_SESSION["userid"]; $nom = $_SESSION["nombre"]; print $uid; // imprime el valor de userid print $nom; // imprime el valor de nombre ?>
5.2.4 Destruir una Variable de Sesin Las variables se pueden eliminar haciendo uso de las siguientes funciones: session_destroy, session_unregister y session_unset. La funcin session_destroy(), destruye todos los datos asociados con la sesin actual. No destruye ninguna de las variables globales asociadas a la sesin ni la cookie. La funcin session_unset(), elimina y libera el espacio ocupado por todas las variables de la sesin actual registradas. La funcin session_unregister(nombreVar), elimina la variable global llamada nombreVar de la sesin actual. Observe el siguiente cdigo:
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
En el siguiente ejemplo se tiene un formulario en una pgina HTML (ejemplo5.4.html), donde el usuario coloca un nombre de usuario y una contrasea. Al hacer clic en el botn aceptar, se ejecuta el script inicioSesion.php, que se encarga de validar los datos introducidos. Si los datos son correctos, se inicia la sesin y se muestran la informacin del usuario que est almacenada en una cookie. Al visitar otra pgina (Licencia.php) la sesin del usuario an estar disponible. Adicionalmente se tiene el script cookieUsuario.php, que se debe ejecutar antes de hacer el inicio de sesin, pues ste es el encargado de crear la cookie con los datos del usuario, incluyendo el login y el password para hacer la verificacin. El siguiente es el cdigo para cookieUsuario.php.
El cdigo PHP inicia aqu... 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. <?php $nombre="Josefina Prez"; $email="[email protected]"; $direccion="Caracas - Venezuela"; $login="josefp"; $password="password1"; setcookie("nombreUs", "$nombre",time()+82000,"/","",0); setcookie("emailUs", "$email",time()+82000,"/","",0); setcookie("direccionUs", "$direccion",time()+82000,"/","",0); setcookie("loginUs","$login",time()+82000,"/","",0); setcookie("passwordUs","$password",time()+82000,"/","", 0); ?>
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. <HTML>
<HEAD> <TITLE>Uso de las Variables de Sesin - Ejemplo 5.4</TITLE> </HEAD> <BODY> <H2 align="center">Inicio de sesin</H2> <HR> <H3 align="center">Ingrese su login y password:</H3> <FORM name="formLogin" action="inicioSesion.php" method="POST"> <TABLE align="center"> <TR> <TD>Login: </TD> <TD><input type="text" name="login"></TD> </TR> <TR> <TD>Password: </TD> <TD><INPUT type="password" name="password"></TD> </TR> <TR> <TD><INPUT type="submit" name="aceptar"value="Aceptar"></TD> <TD><INPUT type="reset" name="borrar" value="Borrar"></TD> </TR> </TABLE> </FORM> </BODY> </HTML>
La pgina ejemplo-5.4.htm, invoca al script inicioSesion.php, cuando se enva el formulario. El siguiente es el cdigo para inicioSesion.php.
El cdigo PHP comienza aqu... 1. 2. <?php /* Para ejecutar este script es necesario que haya ejecutado cookieUsuario.php, ste crea la cookie donde se almacenan los datos del usuario */ session_start(); Libro 1: PHP Hypertext Preprocessor 136
3.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. echo "<H3 align=center> $loginUs=$_COOKIE['loginUs']; $passwordUs=$_COOKIE['passwordUs']; ?> <HTML> <HEAD>
<TITLE>Uso de las Variables de Sesin - Ejemplo 5.4</TITLE> </HEAD> <BODY> <?php if (($_POST['login']!=NULL) and ( $_POST['password']!=NULL)) { $login=$_POST["login"]; $password=$_POST["password"]; if ($login==$loginUs and $password==$passwordUs) { $nombreUs=$_COOKIE['nombreUs']; $emailUs=$_COOKIE['emailUs']; $direccionUs=$_COOKIE['direccionUs']; $ID = session_id(); $_SESSION["idUsuario"] = $loginUs; $_SESSION["nombreUsuario"] = $nombreUs;
Sr(.a) $nombreUs , ha iniciado sesin!</h3>"; echo "<HR>"; echo "<P align=center> Esta es la informacin almacenada:</P>"; print ("<TABLE bordercolor=blue border=1 align=center>\n"); print("<TR><TD>Nombre:</TD><TD>$nombreUs</TD></TR>"); print("<TR><TD>Email:</TD><TD>$emailUs</TD></TR>"); print("<TR><TD>Direccin</TD><TD>$direccionUs</TD></TR>"); print ("</TABLE>"); echo "<P align=center> Su ID de sesin: <B>".$ID."</B><BR>\n"; echo "Su ID de Usuario es: <B>".$_SESSION["idUsuario"] ."</B></P>"; print ("<HR>"); echo "<A href=\"Licencia.php\">Ver condiciones</A>"; } Unidad 5: Desarrollo de Sitios Web 137
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. } else { echo "<H3 align=center> Debe completar todos los campos!</H3>"; else { echo "<H3 align=center> Login y/o Password incorrectos!</H3>"; echo "<A href=\"ejemplo-5.4.html\"> Intente de nuevo!</A>"; echo "<HR>"; }
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 18. 19. 20. 21. 22. 23. <BR>
<B> * Estas son las condiciones de uso:</B> <BR> <FONT face="verdana"size="1" color="#CCCCCC"> Ud. est de acuerdo con todo!!!</FONT> </BODY> </HTML>
La pgina ejemplo-5.4.html, que contiene el formulario de inicio de sesin, se muestra en la Figura 5.8.
Cuando se presiona el botn Aceptar se invoca al script inicioSesion.php. El resultado se puede observar en las Figuras 5.9 y 5.10. En el caso de que los datos introducidos sean incorrectos, se muestra un mensaje de error. Si los datos son correctos se muestra la informacin del usuario.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Cuando se presiona el enlace Ver acuerdo de licencia, se invoca a Licencia.php. El resultado se puede observar en la Figura 5.11.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Aqu culmina la discusin de los elementos necesarios para desarrollar sitios web que logren interaccin con el usuario. Se han presentado los fundamentos necesarios para manipular los datos del formulario y administrar las sesiones de los usuarios. Ambos aspectos son primordiales para desarrollar sitios web. Adicionalmente, otro elemento importante es el acceso a bases de datos. Este tpico se estudiar en la Unidad 7 Acceso a Bases de Datos usando PHP.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de: Definir el trmino Aplicacin Web. Discutir la utilidad de las variables predefinidas de PHP. Explicar cmo se procesan los formularios en PHP. Explicar la administracin de Sesiones en PHP.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
6) Cules de las siguientes afirmaciones son ciertas con respecto a las cookies en PHP? a) La funcin setcookie(), permite crear una cookie b) Las cookies deben enviarse antes de mandar cualquier otra informacin de encabezado c) Todos los parmetros que recibe la funcin setcookie() son obligatorios d) El parmetro secure indica que la cookie se debe transmitir nica y exclusivamente sobre una conexin segura HTTPS 7) Cules de las siguientes afirmaciones son ciertas con respecto al mtodo GET? a) Este mtodo enva los datos del formulario al script en el cuerpo del mensaje de solicitud HTTP b) Los datos enviados son agregados al URL c) Cuando se usa este mtodo una cadena de caracteres es visible en la barra de direcciones del navegador d) Este mtodo enva los datos del formulario al script en el encabezado del mensaje de solicitud HTTP 8) Las variables de sesin en PHP se guardan en el arreglo asociativo $_SESSION a) Verdadero b) Falso 9) Cules de las siguientes afirmaciones son ciertas con respecto a las sesiones en PHP? a) La funcin session_start() se utiliza para iniciar una sesin en PHP b) La llamada a la funcin session_start() se puede ubicar en cualquier punto del script PHP, incluso luego de las etiquetas <html> o <head> c) La funcin session_id() devuelve el session id de la sesin actual d) Una variable de sesin se puede recuperar utilizando la variable predefinida $_ENV 10) Qu se est realizando en el siguiente segmento de cdigo?
<?php import_request_variables('P', 'p_'); $nom = $p_nombre; $ed = $p_edad; ?>
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
b) Se est recuperando la informacin de un formulario que se envi con el mtodo POST c) Se est recuperando la informacin de una cookie d) Se est recuperando la informacin de una variable de sesin
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Ejercicios de Laboratorio
1) Realice una pequea aplicacin web en PHP, que permita crear un carrito de compras sencillo. Para ello utilice cookies. Debe tener un formulario inicial para capturar los datos del usuario (nombre y direccin de correo). (formulario.html) Cuando el usuario presione al botn ingresar debe aparecer otro formulario donde puede seleccionar los productos que desea comprar (utilice campos checkbox). (carrito.php). Cuando el usuario haya seleccionado los productos, debe presionar un botn submit para registrar su compra. En la siguiente pgina se deben imprimir los productos que el compr. (resultado.php).
Si el usuario regresa a la pgina del carrito de compras deben aparecer los valores que l ya haba seleccionado. 2) Crear una aplicacin web en PHP de conversin de moneda. Las variables de factores de conversin deben ser inicializadas como se detalla continuacin:
Monedas Destino Moneda Origen Bolvar (VEB) Dlar (USD) Euro (EUR) Yen (JPY) Peso (MXP) Bolvar (VEB) 1 1920 2500 13,623 191,95 Dlar (USD) 0,00063 1 1,38 0,0085 0,095 Euro (EUR) 0,00052 0,9 1 0,0071 0,08 Yen (JPY) 0,0734 117,45 139,307 1 11,538 Peso (MXP) 0,0658 10,53 12,49 0,089 1
El script PHP debe tomar como entrada de usuario la moneda origen y la cantidad de monedas a convertir. La cantidad ingresada debe ser convertida a las otras monedas. Por ejemplo si ingresa como moneda origen bolvar, debe llevar la cantidad de bolvares ingresados a todas las dems monedas (dlar, euro, yen, peso mexicano). La conversin de moneda debe escribirse como una funcin. El script PHP que realiza el procesamiento del formulario y retorna el resultado, debe usar la funcin definida por el usuario. El resultado de la conversin debe ser presentado en una tabla. Las variables de factores de conversin deben almacenarse en un archivo. De all se deben leer los valores y usarlos dentro de la aplicacin.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
1. Introduccin
Se ha visto en este curso la utilidad de PHP para construir aplicaciones web. En esta unidad, se discutir cmo los scripts PHP pueden interactuar con bases de datos. La creciente complejidad de las aplicaciones de negocio ha creado la necesidad de acceder a datos de diferentes fuentes de datos. Las fuentes de datos pueden variar desde bases de datos a archivos planos. PHP proporciona a los usuarios una interfaz para interactuar con diferentes bases de datos.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Para ello se debe modificar el archivo de configuracin php.ini. Para habilitar la extensin de MySQL se debe agregar la directiva extension, junto con el nombre de la extensin, dentro del archivo php.ini. Si se est trabajando en ambiente Windows, se agrega la siguiente sentencia: extension="ext/php_mysql.dll" La extensin habilitada estar disponible por defecto para todos los scripts que se ejecuten. Incorporar la extensin dinmicamente:
Para incorporar una extensin dinmicamente se debe hacer directamente desde el script PHP, utilizando la funcin dl(). La extensin se carga en tiempo de ejecucin y estar disponible slo para el script actual. Observe el siguiente segmento de cdigo:
<?php dl('ext/php_mysql.dll'); print "Se carg el mdulo de extensin de MySQL"; ?>
Una vez incluida la extensin de MySQL para PHP, se puede comenzar a trabajar con las bases de datos.
Establece una conexin a un servidor MySQL. Retorna un identificador de conexin positiva si tiene xito o falso si ocurre un error. Este identificador se utiliza luego para conectarse a la base de datos. El parmetro host es el nombre del servidor, numpuerto es el nmero de puerto del servicio MySQL (este parmetro es opcional), $userid se refiere a un usuario autorizado para ingresar al servidor y $password es la clave que autentifica al usuario.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
$idConn = mysql_connect('localhost:3306','mysqladmin','mysqladmin'); if (!$idConn) { die("No se conect al servidor: " . mysql_error()); } echo "Conexin satisfactoria"; mysql_close($idConn); ?>
Establece una conexin persistente a servidor MySQL. Retorna un identificador de conexin persistente si tiene xito o falso si ocurre un error. Trabaja de forma similar que mysql_connect(), la diferencia radica en que mysql_pconnect() intenta encontrar una conexin abierta con el mismo host, usuario y password. Si lo encuentra, devuelve el identificador de esa conexin en vez de abrir otra conexin. Una conexin establecida con mysql_pconnect() no ser cerrada cuando acabe la ejecucin del script. La conexin permanecer abierta para ser usado en otros scripts. Nota: Las conexiones permanentes no funcionan si PHP es usado como programa CGI.
mysql_close($idConn)
mysql_close() cierra la conexin MySQL que est asociada con el identificador de conexin especificado. Si no se especifica identificador de conexin, se asume por defecto la ltima conexin. Observe el siguiente segmento de cdigo donde se abre y se cierra una conexin a base de datos.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. <? $idConn = mysql_connect ("localhost:3306","mysqladmin","mysqladmin"); if ($idConn == 0) { echo "Fall la Conexin al Servidor MySQL!"; $sqlerror = mysql_error($idConn); echo"$sqlerror"; } else { echo "La Conexin a Base de Datos fue satisfactoria"; mysql_close($idConn); //Cerrando la conexin Libro 1: PHP Hypertext Preprocessor 152
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
mysql_select_db($BD,$idConexion)
mysql_select_db() establece la base de datos activa que estar asociada con el identificador de conexin dado. El parmetro $BD contiene el nombre de la base de datos que se quiere seleccionar y $idConexion especifica el identificador de conexin del servidor. Si no se especifica un identificador de conexin, se asume la ltima conexin abierta. Esta funcin retorna true si se pudo seleccionar correctamente la base de datos, false en caso de contrario. Observe el siguiente segmento de cdigo, en el cual se selecciona una base de datos.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. <?php $idConn = mysql_connect('localhost:3306', 'mysqladmin', 'mysqladmin'); if (!$idConn) { die('No se pudo establecer la conexin : ' . mysql_error()); } $dbSelect = mysql_select_db('SAMPLE', $idConn); if (!$dbSelect) { die ('No se pudo seleccionar la BD : ' . mysql_error()); } ?>
Una vez que se ha seleccionado una base de datos, las consultas que se ejecutan se harn sobre esa base de datos utilizando la funcin mysql_query(). Si se quiere ejecutar consultas sobre otra base de datos se debe hacer una nueva seleccin.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
mysql_query ("sentenciaSQL",$idConn)
mysql_query() enva una consulta a la base de datos que est activa en el servidor asociado con el identificador de conexin $idConn. Recibe como parmetros la cadena de consulta SQL sentenciaSQL y opcionalmente el identificador de la conexin $idConn. Si no se especifica el identificador de conexin la consulta se ejecuta sobre la ltima base de datos seleccionada asociada a la ltima conexin abierta. Si se ejecuta una sentencia SQL del tipo: UPDATE, DELETE, DROP, INSERT o CREATE, mysql_query() retorna TRUE en caso de xito y FALSE en caso contrario. Si se ejecuta una sentencia SQL del tipo SELECT, SHOW o DESCRIBE, mysql_query() regresa un resource en caso de xito o FALSE en caso de error. Un resource es una variable especial, que contiene una referencia a un recurso externo, como por ejemplo una tabla, una vista, un conjunto de registros o una fila. Los recursos son creados y usados por funciones especiales. Nota: La sentencia mysql_query(), no slo ejecuta sentencias SQL estndar, tambin ejecuta sentencias de creacin y eliminacin de bases de datos.
La funcin die() imprime un mensaje y termina el script actual, en caso de que ocurra algn error.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
$strsql = "INSERT INTO EMPLEADOS VALUES(10,'PEDRO PEREZ', PROGRAMADOR);"; $result = mysql_query($strsql,$idConn); ?>
En este cdigo ejemplo, se elimin un registro, que tena el EMP_COD = 10 de la tabla EMPLEADOS. Ahora se aprender a eliminar una tabla.
Ahora se aprender a obtener un conjunto de registros de una tabla, basados en ciertas condiciones.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Cuando se ejecuta la sentencia SELECT se obtiene un conjunto de registros, a diferencia de las sentencias INSERT, UPDATE o DELETE que sencillamente actualizan la base de datos. Cuando se ejecuta una sentencia SELECT, la variable $result contiene el conjunto de registros recuperados. La extensin de PHP para MySQL provee funciones que permiten recuperar los registros obtenidos. A continuacin se explicarn estas funciones.
mysql_fetch_row($result)
mysql_fetch_row() retorna un vector que corresponde a una fila seleccionada en el conjunto de registros almacenados en $result. Selecciona una fila de datos del resultado especificado en $result. Retorna la prxima fila del resultado o FALSE si ya no quedan ms filas.
1. 2. 3. 4. 5. 6. 7. } $fila = mysql_fetch_row($result); Libro 1: PHP Hypertext Preprocessor 156 <?php $result = mysql_query("SELECT EMP_COD,EMP_NOMBRE FROM EMPLEADO WHERE EMP_CARGO = 'PROGRAMADOR'"); if (!$result) { echo 'No se pudo ejecutar la consulta: ' . mysql_error(); exit;
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
echo $fila[0]; // * Se imprime el EMP_COD del primer registro retornado echo "<BR>"; //Para que los datos obtenidos no queden en la misma lnea echo $fila[1]; // * Se imprime el EMP_NOMBRE del primer registro retornado ?>
mysql_fetch_array($result)
mysql_fetch_array()es similar a mysql_fetch_row(), pero adems de poder acceder los datos a travs de los ndices numricos del arreglo resultado, tambin se puede acceder mediante ndices asociativos, utilizando los nombres de los campos como claves. Retorna un arreglo que corresponde con un registro recuperado o FALSE si no hay ms registros.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. } $fila = mysql_fetch_array($result); echo $fila[0]; // Es equivalente a $fila[EMP_COD] // * Se imprime el EMP_COD del primer registro retornado echo "<BR>"; //Para que los datos obtenidos no queden en la misma lnea echo $fila["EMP_NOMBRE"]; // Es equivalente a $fila[1] // * Se imprime el nombre del empleado del primer registro retornado ?> <?php $result = mysql_query("SELECT EMP_COD,EMP_NOMBRE FROM EMPLEADO WHERE EMP_CARGO = 'PROGRAMADOR'"); if (!$result) { echo 'No se pudo ejecutar la consulta: ' . mysql_error(); exit;
mysql_fetch_assoc($result)
mysql_fetch_assoc() es similar a mysql_fetch_array(), slo que retorna un arreglo asociativo que utiliza los nombres de los campos como claves. Retorna un arreglo asociativo que corresponde con un registro recuperado o FALSE si no hay ms registros.
1. <?php
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
$result = mysql_query("SELECT EMP_COD,EMP_NOMBRE FROM EMPLEADO WHERE EMP_CARGO = 'PROGRAMADOR'"); $fila = mysql_fetch_array($result); echo $fila["EMP_COD"]; // * Se imprime el EMP_COD del primer registro retornado echo "<BR>"; //Para que los datos obtenidos no queden en la misma lnea echo $fila["EMP_NOMBRE"]; // * Se imprime el EMP_NOMBRE del primer registro retornado ?>
mysql_fetch_object($result)
mysql_fetch_object()es similar a mysql_fetch_array(), con la diferencia que retorna un objeto en vez de un arreglo. Slo se pueden acceder a los datos por el nombre del campo y no por su posicin. Retorna un objeto que corresponde con un registro recuperado o FALSE si no hay ms registros. Para acceder a las propiedades de un objeto se utiliza el operador -> . Por ejemplo: $objeto->propiedad.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. <?php $result = mysql_query("SELECT EMP_COD,EMP_NOMBRE FROM EMPLEADO WHERE EMP_CARGO = 'PROGRAMADOR'"); $objetoFila = mysql_fetch_object($result); echo $objetoFila->EMP_COD; // * Se imprime el EMP_COD del primer registro retornado echo "<BR>"; //Para que los datos obtenidos no queden en la misma lnea echo $objetoFila->EMP_NOMBRE; // * Se imprime el EMP_NOMBRE del primer registro retornado ?>
La salida de las funciones anteriormente explicadas es la misma y se puede observar en la siguiente Figura:
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Para poder recuperar cada uno de los registros obtenidos en la consulta se debe un utilizar una estructura iterativa para recorrer todos los registros. Observe el siguiente ejemplo:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. } mysql_free_result($result); ?> <?php mysql_connect("localhost:3306", "mysqladmin", "mysqladmin"); mysql_select_db("SAMPLE"); $result = mysql_query("select * from EMPLEADO"); while ($fila = mysql_fetch_array($result)) { echo $fila["EMP_COD"]; echo $fila["EMP_NOMBRE"]; echo $fila["EMP_CARGO"];
Se han mencionado las funciones bsicas de la extensin de PHP para MySQL que permiten trabajar con bases de datos y manipular registros recuperados. A continuacin se listan otras funciones de gran utilidad cuando se trabaja con base de datos.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
mysql_info($idConexion): Retorna informacin detallada sobre la ltima consulta realizada. mysql_field_name($resultado,$indiceCampo): Retorna el nombre del campo especificado. Recibe como parmetros el identificador de resultado ($resultado) y el ndice del campo ($indiceCampo). mysql_field_type($resultado,$indiceCampo): Retorna el tipo de dato del campo especificado. Recibe como parmetros el identificador de resultado ($resultado) y el ndice del campo ($indiceCampo). mysql_num_fields($resultado): Retorna el nmero de campos que existen en el conjunto de registros recuperados, los cuales estn especificados por $resultado. mysql_num_rows($resultado): Retorna el nmero de filas que existen en el conjunto de registros recuperados, los cuales estn especificados por $resultado. mysql_list_tables($BD,$idConexion): Retorna la lista de tablas que se encuentran en una base de datos. mysql_list_dbs($idConexion): Retorna la lista de bases de datos disponibles en el servidor MySQL. mysql_free_result($resultado): Libera la memoria ocupada por el resultado de la ejecucin de una consulta. $resultado identifica el resultado obtenido.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. $result=mysql_query($strsql);
} // * Seleccionar la Base de Datos de Pases $dbSelect = mysql_select_db('BD_PAISES', $id_conn); if (!$dbSelect) { die ('No se pudo seleccionar la BD : ' . mysql_error()); } //* Crear una tabla con el nombre PAIS $strsql= "CREATE TABLE PAIS (ID INTEGER NOT NULL, NOMBRE VARCHAR(20), PRESIDENTE VARCHAR(40),CONTINENTE VARCHAR(20));";
//**** Insertar registros en la tabla PAIS $strsql = "INSERT INTO PAIS VALUES(100,'USA','GEORGE BUSH','NORTEAMERICA');"; $result=mysql_query($strsql); $strsql = "INSERT INTO PAIS VALUES(200,'VENEZUELA','HUGO CHAVEZ','SURAMERICA');"; $result=mysql_query($strsql); $strsql = "INSERT INTO PAIS VALUES(300,'FRANCIA','NICOLAS SARKOZY','EUROPA');"; $result=mysql_query($strsql); $strsql = "INSERT INTO PAIS VALUES(400,'ESPAA','JOSE L. RODRIGUEZ ZAPATERO','EUROPA');"; $result=mysql_query($strsql); $strsql = "INSERT INTO PAIS VALUES(500,'CHINA','HU JINTAO','ASIA');"; $result=mysql_query($strsql); //**** Mostrar los detalles de la tabla PAIS $strsql = "SELECT ID, NOMBRE, PRESIDENTE,CONTINENTE FROM PAIS WHERE CONTINENTE='EUROPA';"; $result=mysql_query($strsql); ?> <H2 align="center">Pases Europeos</H2>
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. //**** Mostrar los detalles de la tabla PAIS //**** Eliminar un registro de la tabla PAIS <TABLE border="1" align="center">
<TR> <TH>ID</TH><TH>NOMBRE</TH><TH>PRESIDENTE</TH><TH>CONTINENTE< /TH> </TR> <? while($registro=mysql_fetch_array($result)) { echo"<TR><TD>",$registro["ID"],"</TD><TD>", $registro["NOMBRE"],"</TD><TD>", $registro["PRESIDENTE"],"</TD><TD>", $registro["CONTINENTE"],"</TD></TR>"; } ?> </TABLE> <? //**** Actualizar un registro en PAIS $strsql = "UPDATE PAIS SET ID = (ID + 500) WHERE CONTINENTE = 'ASIA';"; $result=mysql_query($strsql);
$strsql = "SELECT ID, NOMBRE, PRESIDENTE, CONTINENTE FROM PAIS;"; $result=mysql_query($strsql); ?> <HR> <H2 align="center">Tabla Pas Resultante</H2> <TABLE border="1" align="center"> <TR><TH>ID</TH><TH>NOMBRE</TH><TH>PRESIDENTE</TH><TH>CONTINE NTE</TH></TR> <? while($registro=mysql_fetch_array($result)) { echo"<TR><TD>",$registro["ID"],"</TD><TD>", $registro["NOMBRE"],"</TD><TD>", $registro["PRESIDENTE"],"</TD><TD>", $registro["CONTINENTE"],"</TD></TR>"; } Libro 1: PHP Hypertext Preprocessor 162
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
El cdigo PHP termina aqu El resultado de ejecutar el ejemplo-6.1.php, se muestra en la Figura 7.1.
Fin del Ejemplo 6.1 Se ha concluido la discusin acerca de las funciones de la extensin de PHP para MySQL que permiten el acceso y manipulacin de datos en una base de datos. Se han abarcado los tpicos fundamentales para acceder a una base de datos en entorno web utilizando PHP. Este aspecto es primordial para la creacin de aplicaciones web.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de: Describir cmo se trabaja con bases de datos en PHP. Explicar cmo conectarse y desconectarse a una base de datos. Explicar cmo recuperar, insertar, eliminar y actualizar registros. Utilizar la extensin de PHP para acceder bases de datos en MySQL.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
2) PHP posee una extensin especfica para el RDBMS MySQL. a) Verdadero b) Falso 3) Cules son las 2 formas en las que se puede incorporar una extensin MySQL a un script PHP? a) En forma automtica o por defecto b) Dinmicamente c) Utilizando la funcin mysql_query() d) Ninguna de las Anteriores 4) La funcin mysql_fetch_array() permite acceder a los datos a travs de ndices numricos y asociativos. a) Verdadero b) Falso 5) La funcin mysql_query() permite ejecutar sentencias SQL estndar, sentencias de creacin y eliminacin de base de datos. a) Verdadero b) Falso 6) Qu funcin se utiliza para cargar una extensin dinmicamente? a) die() b) dl() c) extension d) Ninguna de las Anteriores 7) La funcin mysql_connect() permite establecer una conexin directamente a una base de datos. a) Verdadero b) Falso
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
8) Cules de las siguientes afirmaciones son ciertas? a) mysql_select_db() selecciona una base de datos, que est asociada con el identificador de conexin dado. b) mysql_close() cierra una conexin que se haya establecido con mysql_pconnect(). c) mysql_create_db() permite crear una base de datos nueva en el servidor asociado a un identificador de conexin. d) mysql_drop() permite eliminar una base de datos del servidor asociado un identificador de conexin 9) Qu funciones provee la extensin de PHP para MySQL, para recuperar registros de una consulta? a) mysql_fetch_hash() b) mysql_fetch_row() c) mysql_fetch_array() d) mysql_fetch_class() 10) mysql_field_type() retorna el tipo de dato de un campo especificado. a) Verdadero b) Falso
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Ejercicios de Laboratorio
Se tiene una Base de Datos en MySQL que almacena informacin sobre los empleados de una compaa. Ud debe elaborar un script PHP que permita: 1) Insertar nuevos empleados en la BD. Los datos de los empleados se tomarn de un formulario HTML. Debe mostrar un mensaje de xito en caso de que se pueda realizar la insercin y un mensaje de fallo en caso contrario. 2) Eliminar un empleado especfico. Se tomar como entrada el ID del empleado que se desea eliminar. Debe mostrar un mensaje de xito en caso de que se pueda realizar la eliminacin y un mensaje de fallo en caso contrario. 3) Actualizar los datos de un empleado. El dato que se actualizar es el Telf. Se tomar como entrada el ID del empleado que se quiere actualizar. 4) Mostrar la lista de empleados existentes. Los detalles de los empleados se deben mostrar en una tabla. Por cada empleado debe mostrar: ID, Nombre, Telf., Cargo y Departamento. El siguiente es el script necesario para crear las tablas de empleados. CREATE TABLE EMPLEADOS ( IDEMP INTEGER NOT NULL, NOMBRE VARCHAR(30), FECHA_NAC VARCHAR(20), SEXO VARCHAR(1), TLF VARCHAR(20), CEL VARCHAR(20), DIRECCION VARCHAR(100), CARGO VARCHAR(30) DEPARTAMENTO VARCHAR(30) );
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 171 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
1. Introduccin
La programacin orientada a objetos ha ganado una significativa importancia en tiempos recientes. La orientacin a objetos provee la habilidad de tratar los aspectos de un sistema complejo. Es una metodologa de programacin avanzada y bastante extendida, en la que los sistemas se modelan creando clases, que representan entes del mundo real que poseen caractersticas (atributos) y comportamiento (mtodos). Las clases son definiciones a partir de las cuales se crean objetos. Los objetos son instancias de una clase determinada que adquieren las caractersticas y el comportamiento definidos en la clase. Los objetos interactan unos con otros a travs de mensajes. La programacin orientada a objetos permite crear programas de una forma que se asemeje a la realidad. La tendencia actual es que los lenguajes de programacin adopten la programacin orientada a objetos para desarrollar sistemas. En la versin 5 de PHP se puede utilizar la programacin orientada a objetos como metodologa de desarrollo. En PHP 4 tambin se puede programar bajo esta metodologa, pero en PHP 5 hay un nuevo modelo mejorado. El manejo de objetos ha sido rescrito por completo, permitiendo un mejor desempeo y ms caractersticas. La programacin orientada a objetos cada da es ms utilizada y resulta fundamental manejarla para poder desarrollar en casi cualquier lenguaje moderno. En esta unidad se estudiarn algunos conceptos sobre la programacin orientada a objetos en PHP. Aunque es un tema bastante amplio, se presentar la sintaxis bsica de PHP para utilizar objetos.
6. 7. 8.
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 172 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
En el cdigo anterior, la variable $this es una referencia al objeto actual que se est usando. Las convenciones para nombrar los atributos son las mismas que para nombrar las variables en PHP (vase la Unidad 2 Elementos del Lenguaje PHP). Las convenciones para definir mtodos son las mismas que para definir las funciones en PHP (vase la Unidad 3 Funciones y Extensiones en PHP). En PHP los atributos siempre deben tener un modificador de acceso (public, protected o private). Los atributos pueden ser de cualquier tipo, incluso pueden ser otros objetos.
Cuando se asigna un objeto previamente creado a otra variable, la nueva variable acceder a la misma instancia del objeto que le fue asignado, esto significa que no se realiza una copia del objeto. Una nueva instancia de un objeto previamente creado, es decir, una copia, puede hacerse clonando al objeto. PHP tiene mecanismos para clonar objetos, que se detallarn ms adelante en esta unidad.
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 173 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Cuando se accede a un miembro dentro de la misma definicin de la clase, se utiliza la variable $this, que hace referencia a la instancia actual. Por ejemplo:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. } ?> } } public function mostrarVar2() { $this->mostrarVar1(); $this->var2="Adios a todos!"; echo $this->var2; <?php class ClaseB { private $var1; private $var2; public function mostrarVar1() { $this->var1="Hola a todos!"; echo $this->var1;
Se debe hacer notar que los atributos y mtodos miembros slo se pueden referenciar de acuerdo a las reglas de visibilidad, es decir, de acuerdo a si son pblicos privados o protegidos. Esto se estudiar a continuacin.
La visibilidad de un atributo o mtodo puede ser definida al anteponerle a la declaracin las palabras reservadas: public, protected o private, como se observa a continuacin.
1. 2. 3. 4. 5. <?php class ClasePadre { public $varPublic = 'Atributo Pblico'; protected $varProtected = 'Atributo Protegido';
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 174 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. } $obj1 = new ClasePadre(); }
Programacin Web Avanzada private $varPrivate = 'Atributo Privado'; public function imprimirAtributos() { echo $this->varPublic; echo $this->varProtected; echo $this->varPrivate;
echo $obj1->varPublic; //Muestra el contenido de la variable echo $obj1->varProtected; // Error echo $obj1->varPrivate; // Error $obj1->imprimirAtributos(); // Ejecuta la funcin y muestra todos los valores class ClaseHija extends ClasePadre { /* Todos los atributos y mtodos de una clase padre la hereda clase hija. Se pueden redeclarar en una clase hija, los atributos y mtodos pblicos y protegidos, pero no los privados. */ protected $varProtected = 'Variable redefinida'; function imprimirAtributos() { echo $this->varPublic; echo $this->varProtected; echo $this->varPrivate; } } $obj2 = new ClaseHija(); echo $obj2->varPublic; //Muestra el contenido de la variable echo $obj2->varPrivate; // no definido (no muestra nada) echo $obj2->varProtected; // Error $obj2->imprimirAtributos(); // Muestra: Atributo Pblico Variable redefinida y <vaco> (no muestra contenido) ?>
24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 175 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Los atributos miembros de una clase siempre deben estar definidos con public, private o protected. Si no se define la visibilidad se genera un error. Los mtodos de clase pueden ser definidos con public, private o protected. Los mtodos a los que no se les especifique visibilidad son tomados como public. En PHP 5 se pueden definir mtodos constructores y destructores para las clases. Observe cmo se realiza esto.
Con $this->var1=$arg1, se le est asignando al atributo $var1 del objeto que se est construyendo, el valor que contiene el argumento $arg1. En PHP 4, el constructor de una clase es una funcin que posee el mismo nombre de la clase.
1. <?php
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 176 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
public $var1; private $var2 = 'Valor por defecto'; function ClaseA() { $this->var1="Valor 1"; $this->var2="Valor 2";
PHP 5, tambin acepta este tipo de constructor, para mantener la compatibilidad con la versin anterior. Si no se encuentra una funcin __construct(), pero est definido un mtodo con el nombre de la clase (como se muestra en el segmento de cdigo anterior), ste se toma como el constructor por defecto. Si en una clase estn presente ambos tipos de constructores, se toma por defecto el que est definido como __construct(). Nota: $this hace referencia al objeto sobre el que se est ejecutando el mtodo. En el caso anterior, como se est utilizando dentro del mtodo constructor, $this hace referencia al objeto que se est construyendo.
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 177 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 14. 15. 16. 17. 18. } } print "Se destruye el objeto!";
$objA = new ClaseA("Valor 1"); // Se ejecuta el constructor $objA->mostrarVar(); // Imprime: Valor 1 Valor 2 /* Al terminar de utilizar el objeto o al finalizar el script se destruye el objeto */
19.
?>
El destructor de una clase es un mtodo que realiza tareas de finalizacin cuando un objeto deja de existir. Cuando un objeto ya no est referenciado por ninguna variable, ya no tiene sentido que siga almacenado en la memoria, por tanto, el objeto debera destruirse para liberar espacio en memoria. En el momento de su destruccin se llama al mtodo destructor. El objeto se destruye al terminar de utilizar al objeto (cuando ya no se haga referencia a l) o al finalizar el script. La definicin del mtodo destructor es opcional. Slo se debe crear si se necesita hacer algn procedimiento particular cuando un objeto se elimine de la memoria.
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 178 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. } } } function set_var2($valor) { $this->var2=$valor; } function get_var2() { return $this->var2; function set_var1($valor) { $this->var1=$valor; } function get_var1() { return $this->var1;
$objA = new ClaseA("Valor 1","Valor 2"); $objA->set_var1("Nuevo valor de var1"); echo $objA->get_var1(); // Imprime: Nuevo valor de var1 ?>
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 179 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 13. 14. 15. 16. 17. 18. 19. 20. 21. $objetoA = new ClaseA(); $objetoA->mostrarConstante(); $var1=$objetoA->get_miConstante(); echo ClaseA::miConstante;
En el ejemplo anterior se utiliza el operador de resolucin doble dos puntos (::) , para acceder a una constante dentro y fuera de la clase. En la siguiente seccin se mostrar el uso de este operador.
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 180 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Como se puede observar en el segmento de cdigo anterior, cuando se referencian constantes, atributos o mtodos estticos, desde fuera de la definicin de la clase se usa el nombre de la clase. El operador de resolucin tambin se utiliza cuando se necesita tener acceso desde una clase hija a los atributos o mtodos de su clase padre. Observe el siguiente segmento de cdigo.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. } $objHijo = new ClaseHijo(); $objHijo->miFuncion(); // Invocar la funcin de la ClaseHijo ?> } } // Se sobrescribe la funcin public function miFuncion() { // Se puede invocar a la funcin del padre parent::miFuncion(); echo "Funcin del hijo"; } class ClaseHijo extends ClasePadre { function __construct() { // Se puede invocar al constructor del padre parent::__construct("Inicializada desde el padre"); $this->$varProtected="Inicializada desde el hijo"; } } protected function miFuncion() { echo "Funcin del padre"; <?php class ClasePadre { private $varPriv; protected $varProt; function __construct($valor) { $this->$varPriv=$valor; $this->$varProt=$valor;
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 181 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Como se ha observado en los ejemplos anteriores, las palabras reservadas self y parent son usadas para acceder los miembros o mtodos desde dentro de la definicin de la clase. self: Hace referencia a la clase actual, a la clase que define al mtodo. parent: Hace referencia a la clase padre.
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 182 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 20. 21. 22. 23. 24. 25. 26. 27. 28. } $obj = new ClaseDerivada(); } public function miFuncion() {
// Se puede invocar a la funcin del padre parent::miFuncion(); echo "Funcin de la clase Derivada";
En PHP no es posible extender de mltiples clases. Una clase puede heredar slo de una clase base, es decir, PHP no soporta la herencia mltiple. Los mtodos y atributos heredados pueden ser redefinidos en la subclase, declarndolos con el mismo nombre con el que se definieron en la clase padre. Los mtodos slo pueden sobre escribirse si la clase padre no ha definido ese mtodo como final. Es posible acceder a los mtodos o atributos (slo los atributos estticos) de la clase base, aunque hayan sido redeclarados, en la clase derivada haciendo referencia a ellos con parent::.
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 183 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. } ?> } } } class EstPostgrado extends Estudiante{ private $agnoGraduacion; private $carreraPregrado; private $IDEstudiante; private $inscrito; function inscribirse(){ $inscrito = true; } } class EstPregrado extends Estudiante { function inscribirse(){ parent::inscribirse();
function inscribirse(){ echo "Ao de graduacin: ", $agnoGraduacion; echo "Carrera: ", $carreraPregrado; parent::inscribirse();
Los atributos tambin pueden redeclararse en una subclase. Simplemente se coloca el mismo nombre del atributo que est en la super clase y que se quiere redeclarar, tomando en cuenta que slo se pueden redeclarar en una subclase aquellos atributos que tengan visibilidad public o protected en la super clase.
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 184 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. } ?> } class EstPostgrado extends Estudiante{ private $agnoGraduacion; private $carreraPregrado; private $IDEstudiante; } } private $sexo; protected $IDEstudiante; private $inscrito;
/* Este mtodo no puede ser sobrescrito */ final public function inscribirse(){ $inscrito = true; } } /* Ninguna otra clase puede heredar de EstPregrado, pues est declarada como Final */ final class EstPregrado extends Estudiante { // * Esta declaracin ocasiona un error fatal! * function inscribirse(){ parent::inscribirse(); echo "Se inscribi el estudiante de pregrado";
// * Esta declaracin ocasiona un error fatal! * function inscribirse(){ echo "Ao de graduacin: ", $agnoGraduacion; echo "Carrera: ", $carreraPregrado; parent::inscribirse();
Si se desea declarar una clase final, la palabra reservada final debe colocarse antes de la definicin de la clase (antes de la palabra class). Si se desea declarar un mtodo final, la palabra reservada final debe colocarse antes de la definicin del mtodo (antes de la palabra function y de cualquier modificador de acceso).
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 185 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
4. Polimorfismo
Cualquier lenguaje de programacin orientado a objetos debe soportar el polimorfismo, esto significa que clases diferentes tendrn un comportamiento distinto para la misma operacin. Las clases pueden tener los mismos mtodos (con el mismo nombre), pero cada una los puede implementar de forma diferente. Esto se puede comprender mejor con un ejemplo. Suponga que existen dos clases distintas Automvil y Triciclo. Ambas tienen sus propios mtodos de movimiento, stos tienen diferentes comportamientos, pero su nombre es el mismo.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. } ?> } class Triciclo { function avanzar() { echo "Avanza el triciclo"; } function parar() { echo "Se detiene el triciclo"; } <?php class Automovil { function avanzar() { echo "Avanza el automvil"; } function parar() { echo "Se detiene el automvil"; }
Como se puede observar, ambas clases tienen los mismos mtodos. Suponga ahora que se tiene otra clase que controla el movimiento de los vehculos (es aqu donde entra en juego el polimorfismo) que dependiendo del objeto que se trate, el mtodo al que se invoque actuar de una forma u otra.
1. 2. 3. 4. 5. 6. 7. } ?> <?php class Movimiento { function mover_adelante($obj) { $obj->avanzar(); }
Ahora si se desea mover cualquier vehculo hacia adelante entonces se hace lo siguiente:
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 186 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. <?php $objAuto = new Automovil(); $objTriciclo = new Triciclo(); $objMovimiento = new Movimiento();
// se ejecuta el mtodo avanzar de $objAuto. $objMovimiento->mover_adelante($objAuto); // se ejecuta el mtodo avanzar de $objTriciclo. $obj_Movimiento->mover_adelante($objTriciclo); ?>
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 187 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. function consultarInformacion() { } class Automovil extends Vehiculo{ private $capacidadMotor; // private $tipoVehiculo; // * Error! }
echo "Capacidad:", $this->capacidadMotor; echo "Tipo de Vehculo: ",parent::tipoVehiculo; } } /* Para utilizar atributos y mtodos estticos desde fuera de la definicin de la clase, no se necesita utilizar una instancia */ Vehiculo::$tipoVehiculo; // Acceder a un atributo esttico Vehiculo::verTipoVehiculo(); // Invocar un mtodo esttico /* Se puede instanciar una clase con miembros estticos, para acceder a aquellos miembros que no sean estticos. */ $objV1 = new Vehiculo(); ?>
6. Clases Abstractas
En ocasiones, cuando se utiliza la herencia en la programacin orientada a objetos, se necesita declarar clases que quizs no tengan una definicin completa al principio, simplemente se define para empezar una jerarqua de clases, luego las clases que heredan completan o concretan la definicin. Una clase abstracta es aquella que posee mtodos abstractos. Los mtodos abstractos son aquellos que slamente se declaran dentro de la clase, pero no tienen implementacin. Es decir, estos mtodos no incluyen codificacin, sino que simplemente se declaran, dejando para las clases que hereden la tarea de codificarlos. Si una clase tiene por lo menos un mtodo abstracto, forzosamente debe declararse como abstracta. Las clases abstractas no pueden instanciarse. Es decir, no se puede crear objetos a partir de ellas. Para entender este concepto, suponga que se tiene una clase Vehiculo, de la cual heredan la clase Automvil y la clase Motocicleta. Un vehculo puede arrancar, frenar, acelerar, retroceder, etc. Pero cada tipo de vehculo lo hace a su manera, es decir, una moto arranca, frena y acelera de forma distinta a la del automvil. Es decir, no existe un vehculo donde se puedan definir esas operaciones de forma general para
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 188 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
todos los tipos de vehculos, sino ms bien existen distintos tipos de vehculos concretos que son los que implementan las operaciones, segn lo requieran. En conclusin, es posible tener un conjunto de objetos que tienen unas caractersticas y funcionalidades comunes, pero que difieren en la manera de llevarlas a cabo. Para esto sirve la abstraccin. En PHP 5 se pueden utilizar mtodos y clases abstractos. Aplican los siguientes principios, algunos de los cuales ya se han mencionado: No se permite crear una instancia de una clase que ha sido definida como abstracta. Cualquier clase que contenga por lo menos un mtodo abstracto debe ser abstracta. Los mtodos abstractos simplemente tienen declaracin, no implementacin. Cuando se hereda de una clase abstracta, todos los mtodos abstractos en la declaracin de la clase padre, deben de ser implementados por la clase hijo o en algn nivel de la jerarqua de herencia. Una subclase debe definir los mtodos abstractos que ha heredado y que va a implementar, con la misma o menor visibilidad. Es decir, si el mtodo abstracto es definido como protected en la clase padre, la implementacin de la funcin debe ser definida como protected o public en la clase hijo.
En PHP, para crear clases y mtodos abstractos se utiliza la palabra reservada abstract. Observe el siguiente ejemplo:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. } } } public function mostrarInfo() { echo "Tipo de vehiculo: ",self::$tipoVehiculo,"<br>"; echo "Capacidad del motor: ",$this->capacidad,"<br>"; <?php abstract class Vehiculo { public static $tipoVehiculo="Automotor"; protected $capacidad; /* Las clases que heredan deben definir estos mtodos. Si no lo hacen sern tambin abstractas. */ abstract protected function arrancar(); abstract protected function acelerar($velocidad); abstract protected function frenar(); / * Las clases abstractas pueden tener mtodos concretos. */ function __construct($valor){ $this->capacidad=$valor;
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 189 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. $moto = new Motocicleta(0.9); $moto->mostrarInfo(); $moto->arrancar(); ?> $carro = new Automovil(2.0); $carro->mostrarInfo(); $carro->arrancar(); } public function acelerar($velocidad) { class Motocicleta extends Vehiculo { public function arrancar() { echo "Arranca la motocicleta <br>"; } } } public function acelerar($velocidad) { } class Automovil extends Vehiculo { public function arrancar() { echo "Arranca el automovil <br>";
echo "Acelera el automovil a: $velocidad MPH <br>"; } public function frenar() { echo "Se detiene el automovil <br>";
echo "Acelera la motocicleta a: $velocidad MPH <br>"; } public function frenar() { echo "Se detiene la motocicleta <br>"; }
Nota: Si una subclase no implementa alguno de los mtodos abstractos que hereda de la clase padre, se convierte en una clase abstracta y debe declararse como tal. Para que una subclase que hereda de una clase abstracta sea concreta, debe implementar todos los mtodos abstractos de la clase padre.
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 190 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
7. Interfaces
Las interfaces son mecanismos que se usan comnmente en la programacin orientada a objetos. Dentro de una interface se declaran las funciones que eventualmente sern implementadas por una o varias clases. Cuando una clase codifica las funciones que estn definidas en una interface se dice que la clase implementa a la interface. Puede suceder que existan objetos que no pertenezcan a la misma jerarqua de herencia, pero que deban realizar acciones comunes. Por ejemplo, se puede encender o apagar un TV, un bombillo, un carro, etc y si se considera que esos elementos (la TV, el bombillo, el carro) son objetos, es posible darse cuenta que no heredan de una clase comn. Por eso las interfaces son tiles, para especificar mtodos que pueden ser desarrollados por una o ms clases, aunque stas no tengan otras caractersticas en comn. Las interfaces permiten especificar los mtodos que una clase debe implementar, sin tener que definir cmo son manejados esos mtodos. En PHP, las interfaces son definidas usando la palabra reservada 'interface', pero los mtodos que contiene no estn codificados, slo declarados. Por definicin todos los mtodos en una interface deben ser pblicos. Observe cmo se declara una interfaz.
<?php interface iInterruptor { public function encender(); public function apagar(); } ?>
Para indicar que una clase implementa una interface se utiliza la palabra reservada implements. Todos los mtodos en la interface deben ser codificados dentro de la clase que la implementa. Si se deja uno o ms mtodos sin codificar, se genera un error. Las clases pueden implementar ms de una interface. En la declaracin se separa cada interface con comas. Observe cmo se declara una clase que implementa una interface.
1. 2. 3. 4. 5. 6. 7. Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 191 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM. } <?php interface iInterruptor { public function encender(); public function apagar();
Programacin Web Avanzada 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. $tv = new Televisor(); $tv->encender(); ?> $carro = new Automovil(); $carro->encender(); } } } public function apagar() { echo "Se apaga el televisor"; } public function cambiar($canal) { class Televisor implements iInterruptor { public function encender() { echo "Se enciende el televisor"; } } public function apagar() { echo "Se apaga el automovil"; } class Automovil implements iInterruptor { public function encender() { echo "Se enciende el automovil";
Una clase que implementa una interfaz puede poseer otros mtodos que no estn definidos en la interface. Fjese en el ejemplo anterior donde la clase Televisor tiene un mtodo llamado cambiar(), ste no est declarado en la interface iInterruptor.
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 192 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Sin embargo, una clase debe implementar todos los mtodos de la(s) interface(s) que implementa. Si esto no se cumple, genera un error.
8. Clonacin de Objetos
En PHP se pueden clonar los objetos. Clonar un objeto significa crear una copia de ese objeto. Cuando se clona un objeto se crea una rplica independiente, es decir, aunque ambos objetos, el original y el clon, sean exactamente iguales, ocupan diferentes espacios de memoria. Esto no ocurre cuando se asigna directamente un objeto a otro ($objeto1=$objeto2), en este caso ambos objetos son iguales y hacen referencia al mismo espacio de memoria, es decir, si se modifica $objeto1, $objeto2 tambin se modifica, porque ambas variables referencian al mismo objeto. En PHP, para crear una rplica de un objeto se usa la sentencia 'clone'. Tambin se puede definir el mtodo __clone(), dentro de una clase, para realizar alguna accin especfica en caso de que una instancia de esa clase sea clonada. Si se define el mtodo __clone(), ese mtodo ser llamado en el nuevo objeto clonado. En ese mtodo se pueden realizar acciones para cambiar las propiedades en el clon. Cuando se utiliza la sentencia 'clone', se invoca al mtodo __clone() del objeto, si es posible. Un mtodo __clone() no puede ser llamado directamente. Este mtodo tampoco acepta parmetros. A continuacin se muestra cmo trabaja la clonacin de objetos en PHP.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. } function mostrar(){ echo "$this->idEst, $this->nombre, $this>semestre"; } function asignar($id, $nom, $sem) { $this->idEst=$id; $this->nombre=$nom; $this->semestre=$sem; <?php class Estudiante { private $idEst; private $nombre; private $semestre; function __construct($id, $nom, $sem){ $this->idEst=$id; $this->nombre=$nom; $this->semestre=$sem;
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 193 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. $est1-> mostrar(); } } }
/* El mtodo __clone() se ejecuta automticamente cuando utiliza la sentencia clone */ function __clone() { $this->idEst="00"; $this->semestre=0;
$estudiante1 = new Estudiante("10","Pedro",1); $estudiante2 = new Estudiante("20","Mara",2); $est1 = $estudiante1; // Se asigna la referencia al objeto $est2 = clone $estudiante2; // Se crea una copia del objeto $estudiante1->mostrar(); // Se muestra: 10, Pedro, 1 $est1->mostrar(); // Se muestra: 10, Pedro, 1
// Se cambian los atributos usando la variable $est1 $est1->asignar("30","Pablo",3); // Se muestra: 30, Pablo, 3
$estudiante1->mostrar(); // Se muestra: 30, Pablo, 3 $estudiante2->mostrar(); // Se muestra: 20, Mara, 2 $est2->mostrar(); // Se muestra: 00, Mara, 0 $est2->asignar("40","Josefina",4); $estudiante2->mostrar(); // Se muestra 20, Mara, 2 $est2->mostrar(); // Se muestra 40, Josefina, 4 ?>
En el ejemplo anterior se defini el mtodo __clone() para la clase Estudiante. Por lo tanto, la nueva copia del objeto ser modificada de acuerdo a lo que est especificado en ese mtodo. Si no se hubiese definido ese mtodo, se crea una copia exacta del objeto, sin ningn cambio.
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 194 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 195 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. $objAuto = new Automovil(); $objTriciclo = new Triciclo(); $objMovimiento = new Movimiento(); $objMovimiento->mover_adelante($objAuto); ?>
$obj_Movimiento->mover_adelante($objTriciclo); ?>
La funcin include(archivo) incluye y evala el archivo especificado dentro del script actual. Los elementos que se encuentren en el archivo incluido (variables, funciones, clases, objetos, etc) estarn disponibles para el script que lo incluya. En PHP, la funcin include() se puede utilizar tanto en la programacin orientado a objetos o cuando se programa de forma estructurada. Ahora que ya se han discutido algunos fundamentos de la Programacin Orientada a Objetos en PHP, se presenta un ejemplo, donde se han utilizado algunos de los conceptos presentados en esta unidad. Ejemplo 9.1 En el siguiente ejemplo el usuario debe ingresar una fecha (da, mes, ao). Una vez enviados estos datos, se genera un calendario para el mes del ao especificado, resaltando el da elegido. Para realizar este ejemplo se crea una pgina html (ejemplo-9.1.html), que contiene un formulario para ingresar el da, mes y ao. Tambin se crea un script PHP llamado calendario.php que se ejecuta cuando el usuario enva los datos del formulario. Este script se encarga de recibir estos datos e invocar los mtodos de las clases necesarias para mostrar el calendario. Para poder generar el calendario se cuenta con la clase Calendario (implementada en el archivo classCalendario.php) que es la encargada de crear e imprimir el calendario y con la clase Formato (implementada en el archivo classFormato.php), que se encarga de los aspectos de visualizacin del calendario. El cdigo HTML comienza aqu...
1. 2. 3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD><TITLE>..:: Calendario ::..</TITLE>
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 196 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. <SCRIPT language="JavaScript">
<!-function agregar(slctDia,slctMes,slctAgno) { for (i=1; i<=31;i++){ var elemD = document.createElement("OPTION"); elemD.text = i; elemD.value = i; slctDia.options.add(elemD); } var mes = new Array(' ','Enero', 'Febrero', 'Marzo','Abril', 'Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Novi embre','Diciembre'); for (i=1; i<=12;i++){ var elemM = document.createElement("OPTION"); elemM.text = mes[i]; elemM.value = i; slctMes.options.add(elemM); } for (i=1900; i<=2100;i++){ var elemA = document.createElement("OPTION"); elemA.text = i; elemA.value = i; slctAgno.options.add(elemA); } }// fin funcion //--> </SCRIPT> </HEAD> <BODY onLoad="agregar(document.formFecha.dia, document.formFecha.mes, document.formFecha.agno)" > <H2 align="center">..:: Calendario ::..</H2> <HR> <FORM action="calendario.php" method="get" name="formFecha"> <TABLE border="0" align="center"> <TR> <TD width="146"> DIA: <SELECT name="dia"> <OPTION value="0">-- Dia --</OPTION> </SELECT>
15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 197 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. </TD> </TR> </TD> </TR> <TR> <TD>AÑO: <SELECT name="agno"> <OPTION value="0">-- Ao --</OPTION> </SELECT> </TD> </TR> <TR> <TD>MES: <SELECT name="mes"> <OPTION value="0">-- Mes --</OPTION> </SELECT>
<TR> <TD><INPUT type="submit" name="Submit" value="Mostrar Calendario"></TD> </TR> </TABLE> </FORM> </BODY> </HTML>
El cdigo HTML termina aqu El cdigo anterior corresponde a la pgina ejemplo-9.1.html. A continuacin se muestra el cdigo correspondiente a calendario.php. El cdigo PHP comienza aqu...
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>..:: Calendario ::..</TITLE> </HEAD> <BODY> <?php include("classCalendario.php"); $ao=$_REQUEST["agno"];
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 198 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
$dia=$_REQUEST["dia"]; $meses=array(' ','Enero', 'Febrero', 'Marzo','Abril', 'Mayo', 'Junio','Julio','Agosto', 'Septiembre', 'Octubre','Noviembre','Diciembre'); echo "<H1 align='center'>..:: Calendario del mes de ", $meses[$mes] ," ::..</H1>"; echo "<HR>"; $cc = new Calendario($ao,$mes,$dia); $cc->imprimir_calendario(); echo "<HR>"; // * Imprimir el Calendario con otro formato $cc->formato_cal->setNumeros("Courier", "4", "#FF0000", "FFFF00"); $cc->formato_cal->setTitulo("Courier", "4", "#FFFFFF", "#FF0000"); $cc->imprimir_calendario(); ?> </BODY> </HTML>
14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
El cdigo PHP termina aqu Note que en el script anterior se ha incluido al script classCalendario.php. All se encuentra la implementacin de la clase Calendario. El siguiente cdigo corresponde a classCalendario.php. El cdigo PHP comienza aqu...
1. 2. 3. 4. 5. 6. 7. 8. 9. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <?php include("classFormato.php"); class Calendario { private $dia; private $mes; private $ao; private $dias = array();
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 199 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 10. 11. 12. 13. 14. 15. 16. private $meses = array(); public $formato_cal; function __construct($a=0, $m=0, $d=0){ $this->setFecha($a, $m, $d);
$this->dias = array (1=>"Lun", "Mar", "Mie", "Jue", "Vie", "Sb", "Dom"); $this->meses = array (1=>"ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", "AGOSTO","SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE"); $this->formato_cal = new Formato(); $this->formato_cal->setNumeros(); $this->formato_cal->setTitulo(); $this->formato_cal->setTabla(); } function get_dia() { return $this->dia; } function set_dia($valor) { $this->dia=$valor; } function get_mes() { return $this->mes; } function set_mes($valor) { $this->mes=$valor; } function get_ao() { return $this->ao; } function set_ao($valor) { $this->ao=$valor; } function setFecha($ao, $mes, $dia) { if ($ao >=1 AND $ao <= 2500) { $this->set_ao($ao);
17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 200 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. } } // Fin setFecha() function imprimir_calendario() { /* } } if ($mes >= 1 AND $mes <= 12) { $this->set_mes($mes); } else { } else {
$this->set_ao(intval(date("Y"))); }
$this->set_mes(intval(date("m")));
*/
$ultimodia = 31; while(!checkdate($this->mes, $ultimodia, $this>ao)){ $ultimodia -= 1; } /* Se calcula el nmero de da de la semana del primer da del mes seleccionado */ $DiaSemanaPrimerDiaMes = date('w',mktime(0,0,0,$this->mes,1,$this->ao)); if ($DiaSemanaPrimerDiaMes == 0 ) { $DiaSemanaPrimerDiaMes = 7 ;
echo "<DIV align='", $this->formato_cal->get_alineacion(), "'>\n"; /* Se crea la tabla del Calendario del mes dado */ echo "<TABLE border='",$this->formato_cal->get_borde(), "' cellpadding='0' cellspacing='0'>\n";
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 201 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. // nombre de los das de la semana echo "<TR> \n"; echo "<B><FONT face='",$this->formato_cal>get_tit_letra(), // Se imprime el Mes y el Ao"
$alto_tit = $this->formato_cal->get_col_alto() + 10; echo "<TR> \n"; echo "<TD colspan='7' align='center' bgcolor='", $this->formato_cal->get_tit_fondo(),"' height='$alto_tit'>";
"' size='",$this->formato_cal->get_tit_tamao(), "' color='",$this->formato_cal"</FONT></B></TD>\n"; echo "</TR> \n"; >get_tit_color(),"'>"; echo $this->meses[$this->mes]." de ".$this->ao.
102. for ($i = 1; $i <= count($this->dias); $i++) { 103. echo "<TD align='center' bgcolor='", 104. $this->formato_cal->get_tit_fondo(), 105. "' height='",$this->formato_cal->get_col_alto(), 106. 107. 108. 109. echo "<B><FONT face='", 110. $this->formato_cal->get_tit_letra(), 111. "' size='",$this->formato_cal->get_tit_tamao(), 112. "' color='",$this->formato_cal->get_tit_color(), 113. "'>"; 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. echo "</TR> \n"; /* Se imprimen celdas vacas hasta el da de la semana del primer da */ echo "<TR> \n"; $diasemana = 1; while ($diasemana < $DiaSemanaPrimerDiaMes) echo "<TD align='center' bgcolor='", { } echo $this->dias[$i],"</FONT></B></TD>\n"; "' width='",$this->formato_cal->get_col_ancho(), "'>\n";
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 202 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 141. 142. 143. // * Si es el da actual se resalta 144. if ($dia==$this->dia) 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. } /* } } else { $diasemana += 1; if ($diasemana { echo "</TR>\n<TR>\n"; $diasemana = 1; == } elseif ($diasemana == echo "<FONT face='", for($dia = 1; $dia <= }
Programacin Web Avanzada $this->formato_cal->get_num_fondo(), "' height='",$this->formato_cal->get_col_alto(), "' width='",$this->formato_cal->get_col_ancho(), "'> </TD>\n"; $diasemana += 1;
$ultimodia; $dia++)
echo "<B> <U>$dia </U></B></FONT></TD>\n"; else echo "$dia </FONT></TD>\n"; 7 AND $dia != $ultimodia)
7) {
echo "</TR>\n<TR>\n";
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 203 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. } } //Fin imprimir_calendario() //Fin Calendario } echo "</TR>\n"; } echo "</TABLE>\n"; echo "</DIV>\n"; echo "<TD align='center' bgcolor='",
176. ?>
El cdigo PHP termina aqu Observe que en el script anterior se ha incluido al script classFormato.php. All se encuentra la implementacin de la clase Formato. El siguiente cdigo corresponde a classFormato.php. El cdigo PHP comienza aqu...
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. private $alineacion; private $borde; private $col_ancho; private $col_alto; private $tit_letra; private $tit_tamao; private $tit_color; private $tit_fondo; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <?php class Formato { private $num_letra; private $num_tamao; private $num_color; private $num_fondo;
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 204 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. function get_tit_tamao() { return $this->tit_tamao; } function set_tit_tamao($valor) { } function get_tit_letra() { return $this->tit_letra; } function set_tit_letra($valor) { $this->tit_letra=$valor; } function get_num_fondo() { return $this->num_fondo; } function set_num_fondo($valor) { $this->num_fondo=$valor; } function get_num_color() { return $this->num_color; } function set_num_color($valor) { $this->num_color=$valor; } function get_num_tamao() { return $this->num_tamao; } function set_num_tamao($valor) { $this->num_tamao=$valor; } function get_num_letra() { return $this->num_letra; } function set_num_letra($valor) { $this->num_letra=$valor;
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 205 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. function get_col_alto() { return $this->col_alto; } function get_col_ancho() { return $this->col_ancho; } function set_col_ancho($valor) { $this->col_ancho=$valor; } } function set_borde($valor) { $this->borde=$valor; } function get_borde() { return $this->borde; } function set_alineacion($valor) { $this->alineacion=$valor; } function get_alineacion() { return $this->alineacion; } function set_tit_fondo($valor) { $this->tit_fondo=$valor; } function get_tit_fondo() { return $this->tit_fondo; } function set_tit_color($valor) { $this->tit_color=$valor; } function get_tit_color() { return $this->tit_color; $this->tit_tamao=$valor;
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 206 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. $this->set_alineacion($alin); } //FIN function setTitulo } $this->set_tit_color($color); $this->set_tit_fondo($fondo); } //Fin function setNumeros $this->set_num_letra($letra); if (is_int($tamao)) { } function set_col_alto($valor) { $this->col_alto=$valor; }
function setTitulo($letra= "Arial", $tamao = "2", $color = "#FFFFFF", $fondo = "0000FF") { $this->set_tit_letra($letra); if (is_int($tamao)) { $this->set_tit_tamao(strval($tamao)); } else { $this->set_tit_tamao($tamao);
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 207 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
El cdigo PHP termina aqu A continuacin se muestra el funcionamiento de este ejemplo. La Figura 9.1 muestra el formulario y la Figura 9.2 muestra el resultado de ejecutar el script calendario.php.
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 208 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Existen otras caractersticas avanzadas relacionadas a la programacin orientada a objetos en PHP, que no se han discutido en esta unidad. El objetivo ha sido conocer slo algunos de los principios de programacin orientada a objetos que posee PHP, que permitan crear scripts sencillos con esta forma de programacin.
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 209 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de: Crear Clases y Objetos en PHP. Describir la Herencia en PHP. Conocer cmo se implementa el Polimorfismo en PHP. Crear Clases Abstractas e Interfaces. Discutir cmo se realiza la clonacin de objetos.
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 210 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
function init($valor) { $this->nombre=$valor; } } ?> d) En PHP no se pueden definir el mtodo constructor 4) La seudo variable $this hace referencia objeto sobre el que se est ejecutando el mtodo, es decir, hace referencia a la instancia actual. a) Verdadero b) Falso 5) Para qu sirve el operando dos puntos (::)? a) Para asignar valores a atributos de un objeto b) Permite acceder a los atributos o mtodos estticos y las constantes de una clase c) Permite acceder desde una clase hija a los atributos o mtodos de su clase padre d) Ese operador no existe en PHP 6) Qu palabra reservada se utiliza para indicar que una clase hereda de otra? a) implements b) interface c) clone d) extends 7) Un mtodo declarado como final se puede sobrescribir. a) Verdadero b) Falso 8) En PHP no se pueden definir clases ni mtodos estticos. a) Verdadero b) Falso 9) Cules de los siguientes principios aplican sobre las clases y mtodos abstractos? a) Todos los mtodos abstractos en la declaracin de la clase padre deben de ser implementados por la clase hijo, para que sta no sea abstracta.
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 212 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
b) Cualquier clase que contenga por lo menos un mtodo abstracto debe ser abstracta. c) Los mtodos abstractos simplemente tienen declaracin, no implementacin d) No se permite crear una instancia de una clase que ha sido definida como abstracta. 10) En PHP, para crear una rplica de un objeto se usa la sentencia 'clone'. a) Verdadero b) Falso
Libro 1: PHP Hypertext PreprocessorUnidad 9: Introduccin a la Programacin Orientada a Objetos 213 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Unidad 9: Introduccin a la Programacin Orientada a ObjetosLibro 1: PHP Hypertext Preprocessor 214 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Libro 1: PHP Hypertext Preprocessor Unidad 10: Lab. de Programacin Orientada a Objetos 215 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Ejercicio de Laboratorio
Se tiene una Base de Datos en MySQL que almacena informacin sobre los empleados y los departamentos de una compaa. Ud debe elaborar un script PHP que permita: 1) Insertar nuevos empleados en la BD. Los datos de los empleados se tomarn de un formulario HTML. Debe mostrar un mensaje de xito en caso de que se pueda realizar la insercin y un mensaje de fallo en caso contrario. 2) Eliminar un empleado especfico. Se tomar como entrada la ID del empleado que se desea eliminar. Debe mostrar un mensaje de xito en caso de que se pueda realizar la eliminacin y un mensaje de fallo en caso contrario. 3) Actualizar los datos de un empleado. El dato que se actualizar es el Telf. Se tomar como entrada el ID del empleado que se quiere actualizar. 4) Mostrar la lista de empleados existentes. Los detalles de los empleados se deben mostrar en una tabla. Por cada empleado se debe mostrar: ID, Nombre, Telf., Cargo y Departamento. 5) Mostrar la lista de departamentos existentes. Los detalles de los departamentos se deben mostrar en una tabla. Por cada departamento se debe mostrar: ID, Nombre, Telfono y rea. 6) Debe realizar este ejercicio con la metodologa orientada a objetos. 7) Debe definir por lo menos las clases Empleado, Departamento y Controlad. Esta ltima se encarga de las conexiones a BD y de la ejecucin de sentencias SQL. 8) Script para crear las tablas:
CREATE TABLE EMPLEADOS ( IDEMP INTEGER NOT NULL PRIMARY KEY, NOMBRE VARCHAR(30), FECHA_NAC VARCHAR(20), SEXO VARCHAR(1), TLF VARCHAR(20), CEL VARCHAR(20), DIRECCION VARCHAR(100), CARGO VARCHAR(30) IDDEP INTEGER, FOREIGN KEY (IDDEP) REFERENCES DEPARTAMENTO(IDDEP)) ); CREATE TABLE DEPARTAMENTO ( IDDEP INTEGER NOT NULL PRIMARY KEY, NOMBREDEP VARCHAR(30),
Unidad 10: Lab. de Programacin Orientada a Objetos Libro 1: PHP Hypertext Preprocessor 216 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Libro 1: PHP Hypertext Preprocessor Unidad 10: Lab. de Programacin Orientada a Objetos 217 Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
1. Introduccin
En la Unidad 3 Funciones y Extensiones PHP, introdujo brevemente el tema de las extensiones PHP. Las extensiones son mdulos externos que permiten incorporar mayor funcionalidad a los programas desarrollados. Una extensin puede ofrecer la funcionalidad de interactuar con una base de datos especfica, convertir los elementos de XML en objetos y usarlos dentro del cdigo, utilizar los objetos de Java, etc. En la Unidad 7 Acceso a Bases de Datos usando PHP, se utiliz la extensin de PHP para trabajar con Base de Datos MySQL. En esta unidad se emplearn algunas funciones de la extensin DOM para trabajar con documentos XML. Antes de comenzar a trabajar con estas funciones observe una breve introduccin acerca del lenguaje XML.
2. Qu es XML?
XML (eXtensible Markup Language) o "Lenguaje de Marcado Extensible" es un lenguaje basado en etiquetas desarrollado por el World Wide Web Consortium (W3C). Es una simplificacin y adaptacin del SGML (Standard Generalized Markup Language Lenguaje de Marcado Generalizado Estndar), que permite definir la gramtica de lenguajes especficos. Por lo tanto, XML no es realmente un lenguaje en particular, sino una manera de definir lenguajes para diferentes necesidades. XML se propone como un estndar para el intercambio de informacin estructurada entre diferentes plataformas. Se puede usar en bases de datos, editores de texto, hojas de clculo, documentos y otros. XML es una tecnologa sencilla que se complementa y combina con otras, lo que aumenta sus caractersticas y ventajas. Tiene un papel muy importante en la actualidad ya que permite la compatibilidad entre sistemas para compartir la informacin de una manera segura, fiable y fcil.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
El cdigo XML termina aqu Los datos de las materias y las calificaciones que se han utilizado en el Ejemplo 9.1, se representan con etiquetas que permiten que los datos sean estructurados y significativos. Note tambin que las etiquetas son todas definidas por el usuario y no etiquetas personalizadas de HTML.
Libro 1: PHP Hypertext Preprocessor Unidad 11: Extensiones PHP 221
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Fin del Ejemplo 9.1 Se han presentado las bases para trabajar con un documento XML. Una discusin ms detallada acerca de este tpico est fuera del alcance de este curso.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Esta funcin carga un documento XML desde un archivo y lo deja en un objeto del tipo DOMDocument. Retorna true si se pudo cargar el documento y false en caso contrario. Observe el siguiente segmento de cdigo:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. /* Se carga el documento XML en el objeto $docXml */ $docXml->load('NotasMaterias.xml '); /* La funcion saveXML() captura el documento XML cargado en el objeto $docXml y retorna el contenido en un string */ echo $docXml->saveXML(); // Se imprime el contenido ?> <?php /* El mtodo load()tambin se puede invocar como un mtodo esttico*/ $docXml = DOMDocument::load('NotasMaterias.xml'); echo $docXml->saveXML();// Se imprime el contenido ?> <?php /* Se crea un objeto del tipo DOMDocument, que es el contenedor del documento xml */ $docXml = new DOMDocument();
loadXML(codigoXml)
Esta funcin carga un documento XML a partir de un string y lo deja en un objeto del tipo DOMDocument. Retorna true si se pudo cargar el documento y false en caso contrario. Observe el siguiente segmento de cdigo.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. echo $docXml->saveXML(); // Se imprime el contenido ?> <?php $strXml="<Materias><Materia>Quimica</Materia></Materias>"; /* El mtodo loadXML()tambin se puede invocar como un mtodo esttico*/ $docXml = DOMDocument::loadXML($strXml); Unidad 11: Extensiones PHP 223 $docXml = new DOMDocument(); $strXml="<Materias><Materia>Quimica<Materia></Materias>"; /* Se carga el documento XML en el objeto $docXml */ $docXml->loadXML($strXml); <?php /* Se crea un objeto del tipo DOMDocument, que es el contenedor del documento xml */
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Captura el documento XML que est contenido en un objeto DOMDocument y lo retorna en un string. Esta funcin generalmente se llama despus de cargar un documento XML. Observe un ejemplo donde se muestre el uso de saveXML(). Ejemplo 9.2 El cdigo PHP comienza aqu
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. /* Se carga el documento XML en el objeto $docXml */ $docXml->load('NotasMaterias.xml'); $codXML = $docXml->saveXML(); // Captura el documento XML echo ?> $codXML; // Se imprime el contenido <?php /* Se crea un objeto del tipo DOMDocument, que es el contenedor del documento xml */ $docXml = new DOMDocument();
El cdigo PHP termina aqu En la Figura 9.1 se muestra el resultado de ejecutar el cdigo anterior.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
La funcin load() carga un documento XML desde un archivo y lo deja en el objeto $docXML. Luego con el mtodo saveXML() se obtiene lo almacenado en $docXML y se genera un cadena de texto que se imprime en la pgina. Nota: En la Figura 9.1 se observa que el archivo xml cargado desde un .php, no muestra la estructura de rbol convencional, debido a que Firefox no es el navegador Web por defecto, sin embargo, los datos mostrados corresponden a NotasMaterias.xml. Fin del Ejemplo 9.2 save($archivo)
Captura el documento XML que est contenido en un objeto DOMDocument y lo almacena en un archivo. Esta funcin generalmente se llama despus de crear un documento XML. Observe un ejemplo donde se muestre el uso de save(). Ejemplo 9.3 El cdigo PHP comienza aqu
1. <?php Unidad 11: Extensiones PHP 225
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
El cdigo PHP termina aqu En la Figura 9.2 se muestra el archivo materias.xml, creado al almacenar el documento XML con la funcion save().
Crea una nueva instancia de la clase DOMElement. Este elemento no formar parte del documento a menos que sea agregado con la funcin DOMNode->appendChild(). El
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
parmetro $nombreElemento es el nombre del elemento que se va a crear y $valor el contenido de ese elemento. Si no se especifica $valor, se crea un elemento vaco. Esta funcin retorna una instancia de la clase DOMElement o false en caso de error. createAttribute($nombreAtributo)
Crea una nueva instancia de la clase DOMAttr. Este atributo no ser parte del documento a menos que sea agregado con la funcin DOMNode->appendChild(). Recibe como parmetro el nombre del atributo. Esta funcin retorna una instancia de la clase DOMAttr o false en caso de error. createTextNode($contenido)
Crea una nueva instancia de la clase DOMText. Este texto no ser parte del documento a menos que sea agregado con la funcin DOMNode->appendChild(). Recibe como parmetros el contenido de texto para el elemento. Esta funcin retorna una instancia de la clase DOMText o false si ocurre un error. setAttribute($nombreAtr,$valor)
Asigna un valor a un atributo. Si el atributo no existe se crea. Recibe como parmetros el nombre del atributo y su valor. Esta funcin retorna true si la operacin se realiz correctamente o false en caso contrario. appendChild($nodo)
Agrega un nodo a una lista de nodos. Estos nodos pueden ser atributos, elementos o nodos de texto. El nodo puede ser creado utilizando las funciones DOMDocument-> createElement(), DOMDocument->createTextNode() o DOMDocument-> createAttribute(). Estas funciones permiten agregar informacin nueva a un documento XML. Para comprender estos conceptos a continuacin se presenta un ejemplo. Ejemplo 9.4 En este ejemplo se agrega nuevo contenido al documento XML almacenado en NotasMaterias.xml. El cdigo PHP comienza aqu
1. 2. 3. 4. <?php $docXml = new DOMDocument(); $docXml->load('NotasMaterias.xml'); /* Se carga el documento XML en el objeto $docXml*/
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. $nota = $docXml->createTextNode("A"); /* Se crea el texto: "A" */ $estudiante->setAttribute("id","300"); $estudiante->appendChild($nombreEst);
$notasEst = $docXml->createElement("NotasEstudiante"); /* Se crea el elemento <NotasEstudiante> */ $estudiante = $docXml->createElement("Estudiante"); /* Se crea el elemento <Estudiante> */ $nombreEst = $docXml->createTextNode("Eduardo Carrasco"); /* Se crea el texto: "Eduardo Carrasco" */
/* Se agrega el atributo id="300" al elemento <Estudiante> Resultado:<Estudiante id="300">Eduardo Carrasco</Estudiante> */ $notasEst->appendChild($estudiante); /* Se agrega el elemento <Estudiante> a <NotasEstudiante> Resultado: <NotasEstudiante> <Estudiante id="300">Eduardo Carrasco</Estudiante> </NotasEstudiante> */ // Ahora se crearn los detalles para una materia $detalleMat = $docXml->createElement("DetalleMateria"); /* Se crea el elemento <DetalleMateria> */
$detalleMat->appendChild($nota); /* Se agrega el texto al elemento <DetalleMateria> Resultado: <DetalleMateria>A</DetalleMateria> */ $detalleMat->setAttribute("materia","Matematicas"); /* Se agrega el atributo materia="Matematicas" al elemento <DetalleMateria>
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58.
<DetalleMateria materia="Matematicas">A</DetalleMateria> */ $notasEst->appendChild($detalleMat); /* Se agrega el elemento <DetalleMateria> a <NotasEstudiante> Resultado: <NotasEstudiante> <Estudiante id="300">Eduardo Carrasco</Estudiante> <DetalleMateria materia="Matematicas">A</DetalleMateria> </NotasEstudiante> */ $docXml->documentElement->appendChild($notasEst); /* Se agrega <NotasEstudiante> a <NotasMaterias>*/ $codXML = $docXml->saveXML(); echo $codXML; $docXml->save("NotasMaterias.xml"); ?>
En la Figura 9.3 se muestra la ejecucin del script ejemplo-9.4.php el cual genera como resultado el documento XML modificado (luego de agregar los nuevos elementos).
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Figura 9.3: Ejecucin del script .php que modifica el xml Fin del Ejemplo 9.4
El archivo NotasMaterias.xml es modificado desde ejemplo-9.4.php. A continuacin se visualiza, el archivo xml con la informacin agregada.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
getElementByTagName($nombreElemento)
Retorna una nueva instancia de la clase DOMNodeList con todos los elementos que tengan el nombre dado, siguiendo el orden como han sido encontrados en el documento. Recibe como parmetro el nombre del(los) elemento(s) que se quiere obtener. Si se coloca como parmetro el asterisco (*), retorna todos los elementos del documento. Esta funcin retorna una lista de elementos del tipo DOMNodeList con todos los elementos seleccionados. getElementById($IdElemento)
Retorna una nueva instancia de la clase DOMNodeList con todos los elementos que posean un atributo ID con el valor dado, siguiendo el orden como han sido encontrados en el documento. Recibe como parmetro el id del (los) elemento(s) que se quiere obtener. Esta funcin retorna una lista de elementos del tipo DOMNodeList con todos los elementos seleccionados. getAttribute($nombreAtributo)
Retorna el valor del atributo con el nombre dado, para el nodo actual: $valor = $nodo->getAttribute(id) Esta funcin retorna el atributo o una cadena vaca si el atributo no existe en el nodo. Observe un ejemplo donde se utilizan estas funciones.
Ejemplo 9.5
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
En el ejemplo se utiliza la propiedad textContent, del nodo $estudiante. Esta propiedad contiene el texto del elemento. El resultado de la ejecucin del script ejemplo-9.5.php, se muestra en la Figura 9.5.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Programacin Web Avanzada 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. echo $doc->saveXML(); ?> $docXml->load('NotasMaterias.xml');
// documentElement se refiere al nodo raz del documento $notasMaterias = $docXml->documentElement; // Se obtiene el primer elemento "NotasEstudiante" $notasEst = $notasMaterias-> getElementsByTagName('NotasEstudiante')->item(0); $notasElim = $notasEst->removeChild($notasEst);
removeAttribute($nombreAtributo)
Elimina el atributo especificado de un nodo. Esta funcin recibe como parmetro el nombre del atributo que se desea eliminar del elemento. Retorna true si todo se llev a cabo correctamente, false en caso contrario. La extensin DOM para PHP, posee un amplio conjunto de funciones que no se mencionan en esta unidad. Una discusin detallada acerca de la extensin DOM est fuera del alcance de este curso.
4. PHPLib
PHP comenz a ser popular a partir de la versin 3. Pero esa versin no estaba diseada para el mantenimiento eficiente de aplicaciones complejas. Adems tareas como el manejo de sesiones, procesamiento de variables de formulario, acceso a bases de datos, presentaban ciertas complicaciones. Para esta versin de PHP se liber una librera llamada PHPLib, que contiene un conjunto de clases y funciones que permiten ciertas tareas comunes como el registro de sesiones por usuario, variables persistentes, autenticacin de usuario y otras caractersticas. Esto le permita a los desarrolladores incorporar de forma transparente muchas caractersticas, slo tenan que incluir ciertos archivos en sus programas. Por ejemplo, si queran utilizar la librera para crear un carrito de compras slo tenan que incluir en sus scripts esta lnea: "include(cart.inc)", luego podan utilizar las funciones provistas. La ltima versin liberada de esta librera es la versin 7.2. Muchas de las funciones que ofrece PHPLib fueron mejoradas e incorporadas de forma nativa en las versiones posteriores de PHP. Actualmente, PHP 5 incorpora de forma nativa una librera estndar, conocida como SPL (Standard PHP Library). La SPL es una coleccin de interfaces y clases que estn hechas para resolver problemas estndar e implementar interfaces y clases eficientes
Unidad 11: Extensiones PHP Libro 1: PHP Hypertext Preprocessor 234
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
para acceso de datos. Esta librera ya se encuentra incorporada de forma nativa en PHP 5, es decir, no son necesarios mdulos externos para poder utilizar sus caractersticas. La SPL incorpora caractersticas que permiten trabajar con arreglos, archivos, programacin orientada a objetos, manejo de excepciones y mucho ms, de una forma sencilla. Las funciones de arreglos y archivos que se explicaron en la Unidad 3 Funciones y Extensiones PHP, pertenecen a la SPL. Adicionalmente, existen algunas funciones relacionadas con la programacin orientada a objetos y manejo de excepciones que se encuentran en esta librera. El desarrollador las utiliza de forma transparente.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de: Conocer en qu consiste XML. Utilizar la extensin DOM de PHP para trabajar con documentos XML. Crear scripts PHP que puedan manipular documentos XML. Conocer en qu consiste la librera estndar de PHP.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
7) Qu hace la funcin appendChild()? a) Crea un nuevo atributo b) Carga un documento XML c) Agrega un nodo a una lista de nodos del documento XML d) Elimina un elemento del documento XML 8) Con cules de las siguientes funciones se puede seleccionar un elemento o un conjunto de elementos de un documento XML? a) getElementByTagName() b) getElementBySize() c) getElementbyCount() d) getElementById() 9) PHP 5 incorpora de forma nativa una librera estndar llamada SPL. a) Verdadero b) Falso 10) La SPL (Standard PHP Library) incorpora caractersticas que permiten trabajar con arreglos, archivos, programacin orientada a objetos y manejo de excepciones. a) Verdadero b) Falso
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.
Copyright IBM Corp. 2008 Los materiales del curso no pueden ser reproducidos total o parcialmente sin el previo permiso escrito de IBM.