Vous êtes sur la page 1sur 67

INSTITUTO TECNOLOGICO DEL VALLE DE OAXACA

ADMINISTRACION DE REDES

PROGRAMACION EN PHP

Benedicto Ramrez Santiago

UNIDAD I INTRODUCCION 1.1 Conceptos generales

PHP (acrnimo de PHP: Hypertext Pre-Processor) es un lenguaje de programacin, relativamente nuevo (su antecesor, PHP/FI, data de finales de 1994), concebido principalmente como herramienta para el desarrollo de aplicaciones Web. PHP nos permite disear pginas dinmicas de servidor, es decir, generar pginas bajo peticin capaces de responder de manera inteligente a las demandas del cliente y que nos permitan la automatizacin de gran cantidad de tareas. Si tuviramos que definir PHP en una sola lnea, podramos decir que es un lenguaje interpretado de alto nivel embebido en pginas HTML y ejecutado en el servidor. Aunque existe una multitud de lenguajes y entornos de desarrollo concebidos para Internet, PHP se ha convertido en uno de los lenguajes, del lado servidor, ms ampliamente utilizados para el desarrollo de pginas dinmicas junto con ASP, JSP, Cold Fusion y Perl. En el ltimo ao, el nmero de servidores que utilizan PHP se ha disparado, logrando situarse cerca de los 5 millones de sitios, esto es, ms del 20% de los dominios en Internet. En PHP se combinan muchas caractersticas que contribuyen notablemente a su masiva utilizacin; entre otras, est el hecho de ser un software de libre distribucin y multiplataforma (existen versiones de PHP para U*x, Win32, Mac OS X, etc.) que sigue la filosofa Open Source. Tambin ha contribuido a su xito el hecho de haberse convertido en el complement ideal para el popular tndem LinuxApache en el desarrollo de sitios Web. Pero lo ms destacable del lenguaje y una de las caractersticas que ms han influido en su popularizacin es la sencillez de uso que presenta a los programadores principiantes (se puede desarrollar aplicaciones sencillas en un corto intervalo de tiempo) combinada con las posibilidades avanzadas que proporciona al programador profesional (comunicacin con bases de datos, comunicacin va sockets, generacin de grficos, etc.). Un poco de historia Primeros comienzos de PHP PHP comenz siendo un conjunto de scripts escritos en Perl que permitan a su creador, Rasmus Lerdorf, el control de los accesos a sus pginas personales. A este conjunto de scripts les denomin como Personal Borne Page Tools. Poco a poco, Ramus fue completando las funcionalidades bsicas de su herramienta escribiendo programas en C. En 1995 decidi liberar el cdigo fuente escrito en C para que cualquiera pudiera utilizarlo e, incluso, colaborar en su mejora. De este modo naci PHP/FI. A finales de 1997 se libera PHP/FI 2.0, pasando de ser el proyecto de una sola persona al desarrollo de un equipo. Tuvo un seguimiento estimado de varios miles de usuarios en todo el mundo, con aproximadamente 50.000 dominios informando que lo tenan instalado, lo que sumaba alrededor del 1 % de los dominios de Internet. En junio de 1998 se liber oficialmente PHP 3.0, anunciado como sucesor oficial de PHPIFI 2.0, si bien haba sido completamente reescrito por Andi Gutmans y Zeev Zuraski. Una de las mejores caractersticas de PHP 3.0 que atrajo a docenas de desarrolladores a unirse y enviar nuevos mdulos de extensin era su gran extensibilidad, adems de proveer a los usuarios finales de una slida infraestructura para muchsimas bases de datos, protocolos y APIs. En su apogeo, PHP 3.0 estaba instalado en aproximadamente un 10% de los servidores Web en Internet. Evolucin de PHP El siguiente paso en la evolucin de PHP consisti en la reescritura de su ncleo, dando lugar a un nuevo motor denominado Zend (acrnimo de los apellidos Zeev y Andi). PHP 4.0, basado en este motor, y acoplado con un gran rango de nuevas caractersticas adicionales, fue oficialmente liberado en mayo de 2000. Adems de la mejora de ejecucin

de esta versin, PHP 4.0 inclua otras caractersticas clave, 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. Actualmente se est utilizando la versin 5.0 que integra el nuevo motor Zend 2.0. Qu se puede hacer con php? Aunque principalmente se utiliza para programar scripts que van a ser ejecutados en servidores Web, no hay que olvidar que puede utilizarse como cualquier otro lenguaje (Ped, C, Python, Shell, etc.) para escribir programas que se ejecuten desde la lnea de comandos, es decir, sin la necesidad de que se ejecute conjuntamente con un servidor Web. De todas formas, es en el entorno Web donde ha conseguido su mayor aceptacin, y es que PHP no slo nos permite realizar todas las acciones propias de un script CGI tradicional (procesamiento de formularios, manipulacin de cookies, generacin de pginas con contenidos dinmicos...), sino que tambin nos proporciona las siguientes posibilidades: Soporte para mltiples sistemas operativos: Unix (entre otras, Linux, HP-UX, Solaris y OpenBSD), Microsoft Windows, Mac OS X, RISC OS. Actualmente est en preparacin para las plataformas IBM OS/390 y AS/400. Soporte para mltiples servidores Web: Apache, Microsoft Internet Information Server, Personal Web Server, Netscape e iPlanet, Oreilly Website Pro server, Caudium, Xitami, OmniHTfPd y muchos otros. Soporte para mltiples bases de datos: Adabas D, Ingres, Orac1e (OCI? y OCI8), dBase, InterBase, Ovrimos, Empress, FrontBase, PostgreSQL, mSQL, Solid, Hyperwave, Direct MS-SQL, Sybase, IBM DB2, Informix, Unix dbm y MySQL, entre otras. Soporte para ODBC y extensiones DBX. Soporte para comunicarse con otros servicios usando protocolos tales como LDAP, IMAP, SNMP, NNTP, POP3, HTfP, COM (en Windows) y muchos otros. Puede utilizar objetos Java de forma transparente, como objetos PHP. La extensin de CORBA puede ser utilizada para acceder a objetos remotos. PHP soporta WDDX para intercambio de datos entre lenguajes de programacin en Web. Generacin de resultados en mltiples formatos como XHTML, XML, ficheros de imgenes, ficheros PDF y pelculas Flash... Parser de documentos XML, soporte de los estndares SAX y DOM. Manejo de XSL T para transformar documentos XML. Manejo de expresiones regulares POS IX Extended o Perl. Funciones de comercio electrnico, como Cybercash, CyberMUT, VeriSign Payflow Pro y CCVS para las pasarelas de pago. Otras extensiones muy interesantes son las funciones del motor de bsquedas mnoGoSearch, funciones para pasarelas de IRC, utilidades de compresin (gzip, bz2), conversin de calendarios, traduccin... Y un sinfn de posibilidades que van en aumento cada da.

Comparativa entre asp y php El otro lenguaje utilizado para el diseo de pginas dinmicas de servidor y ampliamente extendido es ASP (Active Server Pages). Es un lenguaje derivado de Visual Basic (aunque se puede programar con otros lenguajes como VBScript y JScript) desarrollado por Microsoft. Evidentemente, se emplea principalmente sobre plataformas que funcionan bajo sistemas operativos Windows (aunque desde hace poco tiempo existe un software de SUN, Sun ONE Active Server Pages, anteriormente conocido como Chili Soft ASP, que permite trabajar con ASP en plataformas Unix/Linux). PHP es en las plataformas Unix lo que ASP en las plataformas Windows. De hecho, ambos lenguajes se insertan en documentos HTML haciendo uso de emulacin de etiquetas (otros lenguajes como Perl deben generar toda la pgina HTML de respuesta). Pero lo cierto es que, a pesar de sus semejanzas, las diferencias entre ambos lenguajes son muchas. Diferencias que hacen que la balanza se vaya inclinando hacia PHP como una mejor solucin para implementar aplicaciones Web. La principal diferencia es que ASP es una tecnologa propietaria de Microsoft, mientras que PHP sigue la filosofa Open Source. Esto hace que ASP est pensado para funcionar principalmente sobre plataformas Microsoft, a pesar de que existan soluciones -con un coste econmico elevado- como Sun ONE ASP que permiten su utilizacin sobre Unix/Linux. Sin embargo, PHP nos permite que sin ningn problema podamos migrar nuestras aplicaciones Web entre todos los sistemas operativos y servidores en los que funciona. La filosofa de producto comercial de ASP influye adems en que gran cantidad del software adicional necesario para complementar una aplicacin Web supone un coste econmico adicional, por ejemplo, ASPEncrypt (necesario para la encriptacin), ServerObject's Qmail (gestor de correo electrnico) o Artisans SAFileUp (necesario para la gestin de descargas de ficheros). Sin embargo, en PHP todas estas opciones estn incluidas de forma gratuita. Finalmente, la comunicacin de errores en ASP y su solucin por parte de Microsoft es muchsimo ms lenta que en PHP; las revisiones del software y los parches a los errores encontrados tienen un tiempo de periodo de desarrollo largo. Hay que tener en cuenta que la filosofa Open Source de PHP hace que a lo largo del mundo existan gran cantidad de equipos comprobando el producto, lo cual permite actualizar el producto con nuevas versiones y revisiones que solventan sus problemas de una forma mucho ms rpida. A nivel tcnico, se pueden dar muchas razones a favor de PHP: entre ellas, una mayor rapidez de ejecucin o una gestin de memoria ms acertada. ASP, debido a su propia construccin (basada en una arquitectura COM), nunca podr llegar a ser tan rpido como PHP. Todas las operaciones en ASP estn controladas por objetos COM (Response, Request, ADO, File System...). Sin embargo, PHP est construido de forma modular; esto quiere decir que todos sus componentes se ejecutan en el mismo espacio de memoria que PHP. De este modo, el cdigo PHP puede ejecutarse ms rpidamente al no sufrir la sobrecarga impuesta por la comunicacin con los diferentes objetos COM y procesos que soporta ASP. Adems, cada compilador de ASP (podemos programar con VBScript o con Jscript) se ejecuta en su propio proceso, de modo que, cuando nos encontramos el comienzo de una etiqueta ASP, se produce un cambio de contexto para salir del parser HTML y elegir el compilador apropiado, volviendo a realizar un salto de contexto al encontrar la etiqueta de cierre ASP para volver de nuevo al parser HTML. Algunos de estos problemas se resuelven en parte con la ltima versin del producto ASP+.

1.2 Instalacin de PHP


Tal y como se ha comentado en la introduccin, la configuracin en la que se encuentra de forma ms habitual el lenguaje PHP suele ser conjuntamente con Apache como servidor Web y MySQL como gestor de base de datos. De hecho, est muy extendido el trmino LAMP, cuyas iniciales hacen referencia a Linux, Apache, MySQL y PHP (aunque tambin podra ser Perl o Python). Por todo ello, en este curso comentaremos la instalacin de estos tres productos en las plataformas Linux y Windows. Modo de funcionamiento El intrprete PHP puede ser ejecutado por el servidor Web de dos modos distintos: como mdulo del propio servidor (interfaz SAPI, Server Application Programming Interface) o como programa externo a ste (modo CGI, Common Gateway Interface). A grandes rasgos, ejecutar un programa CGI le supone a la mquina donde se est ejecutando el servidor Web llamar al sistema operativo para que realice las siguientes tareas bsicas: cargar el programa en memoria, anotarlo en la lista de tareas, lanzar su ejecucin, esperar a que termine y, por fin, descargarlo de memoria y de la lista de tareas. Es de perogrullo: tantas veces un cliente pida la ejecucin de un programa CGI, tantas veces se repetirn estas acciones en la mquina servidora... Es fcil imaginar que, si el nmero de peticiones es medio-alto, el rendimiento general de sta se ver proporcionalmente degradado, no ya slo por el nmero de tareas simultneas a realizar, sino por la ocupacin de la memoria fsica del equipo servidor con las copias del programa CGI ejecutndose. Por otra parte, podemos pensar en un SAPI como un protocolo que permite acceder directamente a las funciones internas del servidor; por tanto, a travs del SAPI podemos aadir nuevas funcionalidades a un servidor Web (por ejemplo, acceso a bases de datos, autenticacin de usuarios, cacheo de pginas, generacin de imgenes al vuelo, etc.). Lo ms interesante de esta caracterstica es que todas estas nuevas funcionalidades se van a ejecutar de forma ms rpida y eficiente ya que lo van a hacer en el espacio de memoria del propio servidor. Esto significa que las ejecuciones de los programas las har el propio servidor Web y, por tanto, sern mucho ms rpidas y eficaces (no habr creacin de procesos nuevos ni ocupacin extra de la memoria fsicas con copias de stos...). Segn el fabricante de servidores, existen varios tipos de APIs: Apache API para el servidor Apache, ISAPI de Microsoft para su producto Internet Information Server, NSAPI de AOL para el servidor iPlanet (antes, Netscape Enterprise Server) y WSAPI, que es el SAPI del servidor Website Pro de OReilly. Adems del bajo rendimiento, la versin CGI tiene innumerables problemas de seguridad asociados. Si, por la razn que fuera, se necesitara instalar PHP en su versin CGI (por ejemplo, para que los procesos PHP se ejecuten bajo determinados usuarios), se recomienda la lectura de los siguientes documentos del CERT (Computer Emergency Response Team): http://www.cert.orgladvisories/CA-1996-11.html http://www.cert.orgladvisories/CA-96.11-interpreters in cgi bin dir.html

Instalacin en Windows PHP est portado para las versiones de Windows de 32 bits, esto es, Windows 95/98/Me y Windows NT/2000/XP. Instalacin de Apache en Windows De las dos ramas de desarrollo del servidor Apache 1.3.x y 2.x, vamos a instalar esta ltima por las ventajas que ofrece en cuanto a rendimiento y amplia gama de posibilidades; de hecho, la versin 2.0 es competitiva con el servidor lIS de Microsoft en cuanto a estabilidad y rendimiento. De la siguiente direccin http://httpd.apache.orgldistJhttpd/binaries/win32/ localice y descargue el archivo: apache_2.0.55-win32-x86-no_ssl. Una vez descargado ejectelo. La instalacin es muy sencilla, basta seguir las indicaciones y rellenar algunos campos de formulario:

Despus de la presentacin y la aceptacin de los trminos de la licencia de uso de este paquete software, aparecer otra ventana donde se nos pide informacin tal como el nombre del dominio donde va a estar colgado el servidor, el nombre con el que queremos que se d a conocer y la direccin de correo del administrador. En la misma pantalla se nos pide adems si queremos que este paquete se instale como servicio de Windows (se ejecutar de manera automtica al arrancar el equipo) en el puerto estndar o wel/-known 80, o bien, que se instale como una copia para el usuario desde el que se est realizando la instalacin y en el puerto 8080.

En la siguiente pantalla preguntar si queremos hacer la instalacin tpica (se instala todo, excepto el cdigo fuente) o personalizada. El directorio por omisin donde se instalan todos los ficheros de Apache es e : \Archi vos de programa \Apache Group \Apache; all se crearn, entre otros, los directorios conf, htdocs, bin, cgi-bin, libexec, logs, etc

La instalacin predeterminada es en Archivos de Programa/Apache Group la cul vamos a cambiar esa es la idea, vamos hacer un directorio en el disco local de arranque del sistema llamada WEB y creamos dentro de ella una para APACHE, otra para PHP5 y una nueva para MYSQL, para tenerlo todo organizado y a mano si se quiere modificar o cambiar algo, adems es ms fcil as cuando se instala PHP como mdulo del servidor. Por lo tanto nos quedara la instalacin de apache por ejemplo en C:\WEB\apache. Una vez indicados los datos necesarios, procederemos a instalar el paquete pulsando en el botn preparado al efecto. Al terminar esta operacin, deberemos ver la siguiente pantalla

Para comprobar que, efectivamente, hemos hecho una instalacin correcta, arrancamos el servidor (ya est disponible desde el men Inicio - > Archivos de Programa - > Apache HTTP Server 2. O .55 - > Control Apache Server - > Start) y, con un navegador, nos conectamos a los URLs http://localhost/ o http://172.16.1.128/. Si la instalacin ha sido correcta, veremos la siguiente imagen:

Las operaciones de arrancar y parar el servidor podemos realizarlas de la siguiente manera. A travs del programa monitor que viene con la instalacin de Apache (Inicio -> Archivos de Programa -> Apache HTTP Server 2.0.55 -> Control Apache Server -> Monitor Apache Servers) que nos mostrar la siguiente pantalla:

O desde una ventana de MS-DOS donde, para arrancarlo, habr que ejecutar el comando: net start apache2 Y, para pararlo, el comando: net stop apache2.

Configurando nuestro apache. Veremos no muy en detalle la configuracin del apache pero si algo. El archivo principal de configuracin del apache se encuentra donde lo hayamos instalado en el directorio conf. Solamente nos interesa un solo archivo de los que all estn y es el de nombre httpd.conf y vamos a abrirlo con el bloc de notas. Nos podemos dar cuenta que es un archivo de texto plano pero que posee directivas que le dan ordenes al ncleo de apache. Todo lo que se encuentre a la derecha del smbolo # es un comentario y lo que no, es una directiva que se carga cuando inicia el servidor. Este archivo hay que tratarlo con un poco de cuidado un mal manejo y apache no iniciara con status ok. Activando ServerName a travs de CanonicalName. Lo que vamos a hacer es simple, activar el nombre que le dimos a nuestro server en la instalacin de apache pues hay una directiva llamada UseCanonicalName que viene por defecto en Off asi que buscamos esa directiva, y cuando la encuentren ponemos su valor a On. Guardamos el archivo. Modificando la directiva ServerName. Busquen ahora la directiva ServerName que est muy cerca arriba de UseCanonicalName por ejemplo en mi caso la lnea es la siguiente. ServerName 172.16.1.128:80 Se fijan que se le aade el puerto de trabajo al final. Lo suprimimos. Quedara as. ServerName 172.16.1.128

Salvamos el archivo httpd.conf en caso de que lo hayamos modificado. Ahora tenemos activado el nombre del servidor, esto mas bien es una personalizacin interesante no tiene demasiada trascendencia.
DIRECTORIO DE PUBLICACION. Es claro que todos los servidores tienen un directorio de publicacin, que es donde se aloja el sitio web, archivos para acceso remoto, etc, predeterminadamente el directorio de publicacin de apache es Ruta de instalacion/htdocs. Ese directorio es el predeterminado que apache nos propone para publicar, pero no queremos que sea ese sino por ejemplo: C:/web/SITIO.

Por lo tanto para cambiarlo debemos buscar la directiva: DocumentRoot que en mi caso se encuentra as. DocumentRoot "C:/WEB/apache/Apache2/htdocs" As que vamos a cambiarlo....para el ejemplo de arriba NOTA: Vale decir que hay que respetar la manera en que estn los slash y backslash, debe ser exactamente igual, debera ahora quedar as: DocumentRoot "C:/web/SITIO" Ahora bien y hay algo importante donde quiera que haya existido en el Archivo una referencia vlida a DocumentRoot "C:/WEB/apache/Apache2/htdocs" Debera ser cambiado a DocumentRoot "C:/web/SITIO" Referencia valida quiere decir que no sea un comentario con #. Para que estos cambios se actualicen tenemos que reiniciar el servidor as que lo hacemos, cerramos nuestra ventana MSDOS de consola de apache y lo volvemos a iniciar como antes. Si ha arrancado bien y lo hemos hecho como hasta ahora podemos ya a comenzar a publicar archivos en el directorio SITIO y recargar la pgina del apache inicial http://172.16.1.128 para que vean como se visualizan todos los directorios y los ficheros. Como podr darse cuenta nos sale la versin de apache, el SO, el nombre que le pusimos y el puerto por donde esta escuchando.

1.3. Configuracin de php.ini


Instalacion de los binarios de php como modulo de apache. Primero que nada tenemos que tener los binarios y no el installer para montar php como mdulo de apache. Los binarios del php 5.0.4 estn aqu.. http://www.php.net/get/php5.0.4-Win32.zip/from/mx2.php.net/mirror. Es un paquete de 7.4 MB que contiene los binarios no un installer por lo que debemos hacerlo todo manual. Si ya tienen los binarios hay que crear en C:\web\ la carpeta donde estarn los binarios de php, creamos una carpeta llamada php5 , y descomprimimos el paquete en dicha carpeta. Primero: Todas esos archivos DLL que se encuentran en el directorio raz del php5 debemos copiarlos al directorio system en win9x y al system32 en NT,win2k,xp,2003. Una vez copiados estamos asegurando gran parte de la instalacin de PHP. Despus, localizamos ah mismo un archivo llamado.. php.ini-dist y lo renombramos a php.ini y lo abrimos. Este como en el apache es el archivo de configuracin el cul se carga en el arranque y se leen las directivas.

Vamos a empezar configurndolo y luego ubicndolo en su lugar. Lo abrimos y buscamos la directiva register_globals=Off y la ponemos a On. con esta directiva a On nos aseguramos de poder tratar con ms facilidad las variables que nos lleguen desde el servidor ya sea por cualquier mtodo GET, POST, COOKIE, etc, Sin embargo viene deshabilitada por cuestiones de seguridad, pero como lo nuestro va a ser de desarrollo no tiene mucho que ver pero si la quisiramos en Off tendramos entonces que trabajar con los arrays Globales $HTTP_X_VARS o $_POST y $_GET . En seguida le vamos a indicar a PHP donde se encuentra el directorio de las extensiones que no son mas que archivos DLL que son algo as como plugins por as decirlo para realizar diferentes tareas desde PHP (por ejemplo acceder a una base de datos MYSQL). Ahora buscamos en el php.ini la cadena extension_dir y podrn ver que no tiene ruta alguna asignada para las extensiones por lo tanto se la vamos a poner, para el caso quedara as: extension_dir = C:/web/PHP5/ext/ con slash y no los backslashes. Ahora buscamos la cadena ;Windows Extensions la cul debajo tiene una serie de nombres de archivos DLL comentados porque si en apache los comentarios eran # aqu son con punto y coma ( ; ). Analizemos entonces que extensiones queremos utilizar, pues para este caso la extensin que acceda a MYSQL pues entonces buscamos la lnea ;extension=php_mysql.dll y la descomentamos...le quitamos el ; del inicio... y as nos aseguramos que se cargue cuando se lea el fichero de configuracin.....y as poder trabajar con la extensin desde scripts PHP....Hay algunas directivas mas pero con estas nos basta para poder comenzar... Finalmente tenemos que copiar este archivo que modificamos en el directorio windows o winNT que es donde debe estar para su funcionamiento.

Acabemos de poner PHP como mdulo de APACHE. Volvamos y editemos de nuevo el archivo de configuracin de apache, que se encuentra en la ruta de instalacin en el directorio conf. Abrimos el httpd.conf y hagamos lo siguiente: Busquemos estas lneas. ## Dynamic Shared Object (DSO) Support ## To be able to use the functionality of a module which was built as a #DSO you # have to place corresponding `LoadModule' lines at this location so #the # directives contained in it are actually available _before_ they are #used. # Statically compiled modules (those listed by `httpd -l') do not need # to be loaded here. ## Example: # LoadModule foo_module modules/mod_foo.so #

Justo debajo creamos una nueva lnea y agregamos lo siguiente: LoadModule php5_module C:/web/PHP5/php5apache2.dll El cul es el modulo de php para trabajar con apache en sus versiones 2.x.x ..Fjense que deben dar la ruta correcta de donde esta ese archivo DLL sin comillas. Aqu cargamos ese mdulo. Ahora buscamos la cadena DirectoryIndex el cual se encuentra actualmente as: DirectoryIndex index.html index.html.var Pues arreglmoslo un poco para ajustarlo a nuestro php y dems. DirectoryIndex index.html index.htm index.php default.php Esta directiva le indica al apache cuales son los archivos por defecto a cargar cuando se accede a un directorio de publicacin, si existe alguno de ellos lo carga, sino nos lista el contenido del directorio. Ahora bien debemos hacer un ajuste y justo debajo de lo que aadimos anteriormente creamos una nueva lnea y ponemos esto: AddType application/x-httpd-php .php .php3 .php4 .phtml AddType application/x-httpd-php-source .phps La primera de las lneas nos indica que la aplicacin para conjunto de trabajo es php la cual se aade y se especifican las extensiones Como sabemos la actual es .php aunque en versiones anteriores es php3, tambin php4 y phtml eso quiere decir que podemos guardar nuestros archivos con cualquiera de estas extensiones donde el servidor sabr que hacer con ellas y las interpretar con el ncleo de PHP. La segunda indica que los archivos que se guarden como extensin .phps sern interpretados por el servidor como una pgina contenedora del cdigo fuente del php. Terminamos de montar PHP como mdulo de apache, si lo han hecho as todo est listo solo nos falta montar el servidor de base de datos pero primero hay que guardar las modificaciones efectuadas en el httpd.conf y reiniciar el servidor APACHE. Ahora vamos probar como se est interpretando el cdigo PHP y hagamos la pgina clsica para probarlo. Hagamos un documento con el siguiente cdigo. <? phpinfo(); ?> Guardemos esto como un archivo de extensin .php en el directorio de publicacin del servidor que es C:\web\SITIO. Guardmoslo como php_inicio.php. La URL sera http://172.16.1.128/php_inicio.php Esta simple funcin de php es para hacer un recuento del sistema, mdulos instalados, variables, caractersticas del servidor y dems Ya podemos empezar a programar en PHP desde aqu. Aunque an sin acceso a bases de datos

UNIDAD II. FUNDAMENTOS DEL LENGUAJE 2.1 Formato del cdigo PHP 2.1.1 Delimitadores Los delimitadores son smbolos que marcan o indican el inicio y fin de un bloque de sentencias. Cada script de PHP comienza y acaba con los delimitadores <?php y ?>. Sin embargo de acuerdo a la configuracin hecha por el programador podra escribir sus programas en PHP como se muestra a continuacin. <? instrucciones <?PHP instrucciones <% instrucciones PHP ?> PHP ?> PHP %>

2.1.2. Extensin de los ficheros en php. Las extensiones que usa php son: php3, php4, phtml, phps y php. Para que las acepte necesita configurar correctamente el archivo httpd.conf. La extensin que usaremos ser php. 2.1.3. Comentarios. Php utiliza comentarios tipo C, C++ y Java. // Para indicar un comentario simple en una lnea. Ejemplo: $numero1=10; //Variable entera /*. */ Para indicar un comentario mltiple. Ejemplo: /* Programa: Capital.php Autor :B.R.S. Fecha : 19/05/2007 Versin : 3.0 */ Tambin puede usar el # para indicar un comentario de lnea (Es de tipo shell) 2.1.4. Fin de Lnea.

El fin de la sentencia se marca en todas las instrucciones con ";" o ?> Por Ejemplo: <? echo "Finalizando instrucciones con etiqueta de cierre" ?> <? ?> echo "Finalizando instrucciones con punto y coma";

2.2 2.2.1

Sintaxis Bsica. Variables.

En los lenguajes de programacin, al definir o declarar una variable, es habitual expresar la naturaleza del tipo de informacin que se va a guardar. Adems, durante todo el programa, cualquier valor asignado a esa variable se espera que sea del tipo de datos utilizado en su definicin, provocando un error cuando se intenta asignar un tipo de datos diferente. En PHP no es necesario declarar la variable, es decir, no es necesario decirle al programa si una variable es una cadena o un nmero entero, ya que PHP se encargar de definirla por s mismo. Por ejemplo:

<?php $cadena = "Hola Mundo"; $numero = 100; $decimal = 8.5;

?>

Como puedes observar las tres variables fueron simplemente definidas con un valor y no necesariamente con el tipo. Tanto "Hola Mundo" que es una cadena, como 100 que es un nmero y 8.5 que es un decimal, son aceptadas por el PHP e interpretadas en la ejecucin del script. Sin embargo si pedimos en nuestro script realizar una operacin matemtica con dos de estas variables, no obtendremos un mensaje de error sino que la variable cadena ser asimilada a numrica: <? $cadena="5"; //esto es una cadena $numero=3; //esto es un entero echo $cadena + $numero ?> Este script dar como resultado "8". La variable cadena ha sido asimilada en entero (aunque su tipo sigue siendo cadena) para poder realizar la operacin matemtica. Del mismo modo, podemos operar entre variables tipo entero y real. No debemos preocuparnos de nada, PHP se encarga durante la ejecucin de interpretar el tipo de variable necesario para el buen funcionamiento del programa. Sin embargo, en contraste, hay que tener cuidado en no cambiar maysculas por minsculas ya que, en este sentido, PHP es sensible. Conviene por lo tanto trabajar ya sea siempre en maysculas o siempre en minsculas para evitar este tipo de malentendidos a veces muy difciles de localizar. En PHP todos los nombres de las variables van precedidos por el smbolo de dlar, $, seguido, al menos, por una letra (de la a a la z o de la A a la Z) o un guin bajo ("_") para, despus, continuar por cualquier combinacin de letras (en maysculas o minsculas), de dgitos (del O al 9) y de guiones bajos ("_"). La siguiente tabla muestra algunos ejemplos de identificadores vlidos e invlidos: Vlidos $Valor actual $NumeroDeDatos $N $n No vlidos $Valor actual $#Datos $2Saldos $Prueba,valor Motivo Contiene un espacio Contiene el carcter no vlido "#" Empieza por nmero Contiene el carcter no vlido ","

Dependiendo de la informacin que contenga, una variable puede ser considerada de uno u otro tipo: Variables numricas. Almacenan cifras Enteros: Numeros sin decimales $entero=2002; Real: Numeros con o sin decimal $real=3.14159;

Variables alfanumricas. Almacenan textos, nmeros y/o cifras Cadenas: Almacenan texto o informacin numrica escrita entre comillas dobles o simples. Ejemplo: $cadena="Hola amigo"; $escuela=CBTis 23 ; //Permite el uso de comillas dobles en una cadena Existen algunos caracteres especiales que no pueden ser aadidos a una cadena a menos que se incluya el smbolo \ antes del carcter. A este tipo de operacin se le conoce como secuencia de escape.

Veamos algunas de ellas: Secuencia \$ \ \ \\ \n \r \t Valor Signo de Dlar Comillas dobles Comillas simples Barra invertida Salto de lnea Retorno de carro Tabulador.

Variables Booleanas. Son las variables que slo pueden tener uno de dos posibles valores: Verdadero o Falso Ejemplo: $bandera=TRUE; Variables Nulas . Son las variables que contienen el valor: NULL Ejemplo: $variable_nula=NULL; Tablas. Almacenan series de informaciones numricas y/o alfanumricas. Conocidas como Arrays o vectores. Ejemplo: $sentido[0]="ver"; $sentido[1]="tocar"; $sentido[2]="oir"; $sentido[3]="gusto"; $sentido[4]="oler"; Objetos. Se trata de conjuntos de variables y funciones asociadas. Presentan una complejidad mayor que las variables vistas hasta ahora. Las analizaremos mas adelante

Formas en que una variable de PHP puede ver variado su tipo. PHP no requiere que indiquemos el tipo que va a contener una variable, sino que lo deduce del valor que asignemos a la variable. Asimismo, se encarga de actualizar automticamente el tipo de la variable cada vez que le asignamos un nuevo valor. Por ello, para cambiar el tipo de una variable simplemente le asignamos un valor con un nuevo tipo. Conversin explcita. En cualquier caso, podemos forzar una variable para que cambie de tipo con la funcin setType(). setType($variable,"nuevo_tipo"); La funcin setType() actualiza el tipo de $variable a "nuevo_tipo" y devuelve un boleano indicando si hubo xito o no en la conversin. Entre "nuevo_tipo" tenemos: "integer" "double" "string" "array" "object"

Tambin podemos hacer que una variable se comporte como un tipo determinado forzndola, de la misma manera a como se hace en el lenguaje C. $variable = "23"; $variable = (int) $variable; Los forzados permitidos son: (int), (integer) - fuerza a entero (integer) (real), (double), (float) - fuerza a doble (double) (string) - fuerza a cadena (string) (array) - fuerza a array (array) (object) - fuerza a objeto (object)

Variables asignadas por referencia En PHP tambin podemos asignar variables por referencia. En ese caso no se les asigna un valor, sino otra variable, de tal modo que las dos varialbles comparten espacio en memoria para el mismo dato. La notacin para asignar por referencia es colocar un "&" antes del nombre de la variable. <?php $foo = Arturo'; // Asigna el valor Arturo a $foo $bar = &$foo; // Referencia $foo va $bar. $bar = "Mi nombre es $bar"; // Modifica $bar... echo $foo; // $foo tambin se modifica.

echo $bar; ?> Esto dar como resultado la visualizacin dos veces del string "Mi nombre es Arturo". Algo como: Mi nombre es ArturoMi nombre es Arturo Variables del Sistema Dada su naturaleza de lenguaje de lado servidor, PHP es capaz de darnos acceso a toda una serie de variables que nos informan sobre nuestro servidor y sobre el cliente. La informacin de estas variables es atribuida por el servidor y en ningn caso nos es posible modificar sus valores directamente mediante el script. Para hacerlo es necesario influir directamente sobre la propiedad que definen. Existen multitud de variables de este tipo, algunas sin utilidad aparente y otras realmente interesantes y con una aplicacin directa para nuestro sitio web. Aqu os enumeramos algunas de estas variables y la informacin que nos aportan: Variable Descripcin Nos informa principalmente sobre el sistema operativo y tipo y versin de navegador utilizado por el internauta. Su principal utilidad radica en que, a partir de esta informacin, podemos redireccionar nuestros usuarios hacia pginas optimizadas para su navegador o realizar cualquier otro tipo de accin en el contexto de un navegador determinado.

$HTTP_USER_AGENT

Nos devuelve la o las abreviaciones de la lengua considerada como principal por el navegador. Esta lengua o lenguas principales pueden ser elegidas en el men de opciones del $HTTP_ACCEPT_LANGUAGE navegador. Esta variable resulta tambin extremadamente til para enviar al internauta a las pginas escritas en su lengua, si es que existen. $HTTP_REFERER Nos indica la URL desde la cual el internauta ha tenido acceso a la pgina. Muy interesante para generar botones de "Atrs" dinmicos o para crear nuestros propios sistemas de estadsticas de visitas. Nos devuelve una cadena con la URL del script que est siendo ejecutado. Muy interesante para crear botones para recargar la pgina. Se trata de un array que almacena los nombres y contenidos de las variables enviadas al script por URL o por formularios GET Se trata de un array que almacena los nombres y contenidos de las variables enviadas al script por medio de un formulario POST Se trata de un array que almacena los nombres y contenidos de las cookies. Veremos qu son ms adelante.

$PHP_SELF

$HTTP_GET_VARS

$HTTP_POST_VARS $HTTP_COOKIES_VARS

$PHP_AUTH_USER

Almacena la variable usuario cuando se efecta la entrada a pginas de acceso restringido. Combinado con $PHP_AUTH_PW resulta ideal para controlar el acceso a las pginas internas del sitio. Almacena la variable password cuando se efecta la entrada a pginas de acceso restringido. Combinado con $PHP_AUTH_USER resulta ideal para controlar el acceso a las pginas internas del sitio. Muestra la direccin IP del visitante. Nos devuelve el path fsico en el que se encuentra alojada la pgina en el servidor. Guarda el identificador de sesin del usuario. Veremos ms adelante en qu consisten las sesiones.

$PHP_AUTH_PW $REMOTE_ADDR $DOCUMENT_ROOT $PHPSESSID

No todas estas variables estn disponibles en la totalidad de servidores o en determinadas versiones de un mismo servidor. adems, algunas de ellas han de ser previamente activadas o definidas por medio de algn acontecimiento. As, por ejemplo, la variable $HTTP_REFERER no estar definida a menos que el internauta acceda al script a partir de un enlace desde otra pgina.

Variables superglobales A partir de PHP 4.1.0, se dispone de un conjunto de varibles de tipo array que mantienen informacin del sistema, llamadas superglobales porque se definen automticamente en un mbito global. Estas variables hacen referencia a las mismas que se accedan antes por medio de los arrays del tipo $HTTP_*_VARS. stas todava existen, aunque a partir de PHP 5.0.0 se pueden desactivar con la directiva register_long_arrays. La lista de estas variables, extrada directamente de la documentacin de PHP es la siguiente: $GLOBALS Contiene una referencia a cada variable disponible en el espectro de las variables del script. Las llaves de esta matriz son los nombres de las variables globales. $GLOBALS existe dese PHP 3. $_SERVER Variables definidas por el servidor web directamente relacionadas con el entorno en don el script se esta ejecutando. Anloga a la antigua matriz $HTTP_SERVER_VARS (la cual est todava disponible, aunque no se use). $_GET Variables proporcionadas al script por medio de HTTP GET. Anloga a la antigua matriz $HTTP_GET_VARS (la cual est todava disponible, aunque no se use). $_POST Variables proporcionadas al script por medio de HTTP POST. Anloga a la antigua matriz

$HTTP_POST_VARS

(la

cual

est

todava

disponible,

aunque

no

se

use).

$_COOKIE Variables proporcionadas al script por medio de HTTP cookies. Anloga a la antigua matriz $HTTP_COOKIE_VARS (la cual est todava disponible, aunque no se use). $_FILES Variables proporcionadas al script por medio de la subida de ficheros via HTTP . Anloga a la antigua matriz $HTTP_POST_FILES (la cual est todava disponible, aunque no se use). Vea tambin Subiendo ficheros por mtodo POST para ms informacin. $_ENV Variables proporcionadas al script por medio del entorno. Anloga a la antigua matriz $HTTP_ENV_VARS (la cual est todava disponible, aunque no se use). $_REQUEST Variables proporcionadas al script por medio de cuaquier mecanismo de entrada del usuario y por lo tanto no se puede confiar en ellas. La presencia y el orden en que aparecen las variables en esta matriz es definido por la directiva de configuracin variables_order. Esta matriz no tiene un anlogo en versiones anteriores a PHP 4.1.0. Vea tambin import_request_variables(). $_SESSION Variables registradas en la sesin del script. Anloga a la antigua matriz $HTTP_SESSION_VARS (la cual est todava disponible, aunque no se use). Vea tambin la seccin Funciones para el manejo de sessiones para ms informacin.

mbito de existencia de una variable en PHP En cualquier lenguaje de programacin las variables tienen un mbito, que es el lugar o lugares donde tienen validez. El mbito vara en funcin de donde se hayan creado esas variables, pudiendo ser globales o locales. En PHP, todas las variables creadas en la pgina, fuera de funciones, son variables globales a la pgina. Por su parte, las variables creadas dentro de una funcin son variables locales a esa funcin. Las variables globales se pueden acceder en cualquier lugar de la pgina, mientras que las variables locales slo tienen validez dentro de la funcin donde han sido creadas. De modo que una variable global la podemos acceder dentro de cualquier parte del cdigo, mientras que si intentamos acceder a una variable local fuera de la funcin donde fue creada, nos encontraremos con que esa variable no tiene contenido alguno. Ahora bien, si intentamos acceder a una variable global dentro de una funcin, en principio tambin nos encontraremos con que no se tiene acceso a su valor. Esto es as en PHP por motivos de claridad del cdigo, para evitar que se pueda prestar a confusin el hecho de usar dentro de una funcin una variable que no ha sido declarada por ningn sitio cercano. Entonces, si queremos utilizar una variable global a la pgina dentro de una funcin, tenemos que especificar de alguna manera que esa variable que vamos a utilizar es una

global. Existen en PHP un par de maneras de utilizar variables globales a la pgina dentro de una funcin. Son las siguientes: Matriz GLOBALS Existe un array en PHP llamado $GLOBALS, que guarda una referencia a todas las variables creadas de manera global a la pgina. Es una matriz o array asociativo, de los que en lugar de ndices numricos utilizan ndices de texto, donde cada ndice es el nombre que hemos dado a la variable y cada valor es el contenido de cada variable. Supongamos que tenemos esta declaracin de variables globales a la pgina, es decir, fuera de cualquier funcin: $mivariable = "pepe"; $otravariable = 1234; Si queremos acceder a esas variables dentro de una funcin utilizando el array $GLOBALS tendramos este cdigo: function mifuncion(){ //dentro de la funcin, para acceder a las variables utilizo $GLOBALS echo $GLOBALS["mivariable"]; echo $GLOBALS["otravariable"]; } Como se puede ver, se accede al contenido de las variables globales con el array $GLOBALS, utilizando como ndices de la matriz los nombres de variables que deseamos mostrar. Esto imprimira por pantalla el texto "pepe1234", el valor de las dos variables uno detrs del otro. Declaracin de uso de variables globales dentro de una funcin Otra cosa que podemos hacer para acceder a variables globales dentro de una funcin es especificar al comienzo de dicha funcin la lista de variables que vamos a utilizar dentro. Para especificar esas variables utilizamos la palabra "global" seguida de la lista de variables que se van a utilizar del entorno global. function mifuncion(){ global $mivariable, $otravariable; //con esa lnea dentro de la funcin, declaramos el uso de variables globales echo $mivariable; echo $otravariable; } Como vemos, con "global" se especifica que vamos a utilizar unas variables que fueron declaradas como globales a la pgina. Una vez hecho esto, ya podemos acceder a esas variables globales como si estuvieran declaradas dentro de la funcin. Cualquier alteracin que hagamos a las variables dentro de la funcin permanecer cuando se haya salido de la funcin, tanto si accedemos a travs del array $GLOBALS o declarando con "global" el uso de esas variables.

2.2.2 Tipos de datos Los programas tratan la informacin en forma de datos y estos datos se clasifican por tipos. De ah viene el concepto de tipo de datos. PHP soporta los siguientes tipos de datos: entero nmeros en punto flotante cadena array objeto Estos tipos de datos se clasifican en dos categoras: Escalares: enteros, punto flotante y cadenas. Los tipos escalares son aquellos cuyos valores no pueden 'dividirse' en partes menores, no como los arrays, por ejemplo. Compuestos: arrays y objetos. Se puede asignar cada uno de estos tipos de valor a variables o bien devolverse de funciones sin ningn tipo de limitacin. Como comentamos en el punto anterior, el tipado en PHP es muy poco estricto. El tipo de una variable normalmente no lo indica el programador; en su lugar, lo decide PHP en tiempo de ejecucin dependiendo del contexto en el que se utilice esa variable. Adems comentamos si se quiere obligar a que una variable se convierta a un tipo concreto, se podra forzar la variable (conversin explcita) o usar la funcin settype(). Una variable se puede comportar de formas diferentes en ciertas situaciones, dependiendo de qu tipo sea en ese momento. 2.2.3. Otros componentes asociados a las variables PHP 5 brinda al programador una serie de funciones para el manejo de variables. isset(). Con esta funcin podemos averiguar si una funcin existe dentro de nuestro programa. Si existe devuelve true y si no existe false. <?php $DNI = "8868543-Z"; if (isset ($DNI)) { echo (La variable DNI existe!!! ") ; ?> unset(). Libera la memoria ocupada por una variable, destruyendo su nombre y su contenido. Despus de usar unset (), la variable destruida aparecer como false al utilizar la funcin i s s e t ( ). <?php $Nombre = "Mara Fernanda"; if (isset($Nombre)) { echo ("El nombre existe!!!"); } //Podemos comprobar qu pasa si liberamos la variable $Nombre

unset($Nombre) ; if (isset ($Nombre)) { echo ("El nombre existe!!!"); } else { echo("El nombre ya no existe!!!"); } ?> El resultado es el siguiente: El nombre existe!!! El nombre ya no existe!!! gettype(). Con esta funcin podemos averiguar el tipo de dato almacenado en la variable. Nos puede devolver uno de los siguientes valores: <?php integer double string array object class unknown type

$correo = "ben_enr@yahoo.com" ; echo "la variable correo es del tipo: "; echo gettype ($correo) ;

?> settype(). Convierte el tipo de la variable al especificado en la funcin. El tipo debe especificarse eligiendo uno de los siguientes: array, double, integer, object o string. Si la funcin no es capaz de convertir el tipo de la variable devuelve el valor false. <?php $correo = "ben_enr@yahoo.com" ; if (settype($correo,"integer")) { echo ("Variable correo convertida a Entero<br>"); } else { echo (" Imposible convertir al tipo Entero<br>"); } echo ("Valor actual de correo es $correo");

?> Al tratar de convertir un tipo string (una cadena de caracteres) a un entero, PHP 5 comprueba si existe algn nmero. Si no existe cambia el valor a O y la funcin settype () la evala como correcta. empty(). Comprueba si una variable est vaca, no existe, o su valor es o. <?php

?>

$correo = "ben_enr@yahoo.com" ; if (empty ($nombre)) { echo ("La variable nombre no existe"); } $numero_entero = O; if (empty($numero_entero)) echo ("La variable numero entero no existe o tiene el valor O") ; }

Estas funciones devuelven true si la variable pasada coincide con el tipo que indica la funcin. Si la variable $numero_entero se evala con la funcin is_integer () devolver true. < ?php $numero entero = o; if (is_integer ($numero entero)) { echo ("numero_entero es del tipo integer"); ?> intval(), doubleval(), strval(). Convierte el valor de una variable al tipo indicado en la funcin. Esta funcin no permite la conversin a tipos object o array. <?php //Conversin de un tipo string a un integer $cadena = "232"; echo "El tipo de la variable cadena es ". gettype($cadena) ."<br>"; $numero = intval($cadena); echo ("el numero es $numero");

?>

2.2.4. Constantes. Las constantes son tipos de datos que no varan en el desarrollo de un programa. En la vida real existen muchos tipos de constantes, el nmero pi, el valor de un kilmetro, el nombre de una empresa, etc. Solo se puede definir como constantes valores escalares (boolean, integer, float y string ). Tambien se puede utilizar la funcin constant(), para obtener el valor de una constante, en el caso de que queramos expresarla de forma dinmica Usa la funcin get_defined_constants() parar obtener una lista de todas las constantes definidas. Sintaxis para declarar una constante: define( NOMBRE_CONSTANTE, Valor);

Ejemplo: define(PROFR,Benedicto Ramrez); Para acceder o mostrar el contenido de una constante se utiliza slo el nombre sin la inclusin del signo $. Ejemplo: echo PROFR;
constant ( string nombre ). Devuelve el valor de una constante indicada por nombre.

<?php

Ejemplo: define("TAMMAX", 100); echo TAMMAX; echo constant("TAMMAX"); // igual que la lnea anterior

?>

bool defined ( string nombre ) Devuelve TRUE si la constante nombrada por nombre ha sido definida, FALSE de lo contrario. <?php /* Note el uso de comillas, esto es importante. Este ejemplo verifica si * la cadena 'CONSTANTE' es el nombre de una constante * llamada CONSTANTE */ if (defined('CONSTANTE')) { echo CONSTANTE; } 2.2.5. Expresiones. Las expresiones son la piedra angular de PHP. En PHP, casi cualquier cosa que escribes es una expresin. La forma ms simple y ajustada de definir una expresin es "cualquier cosa que tiene un valor". Las formas ms bsicas de expresiones son las constantes y las variables. Cuando escribes "$a = 5", ests asignando '5' a $a. '5', obviamente, tiene el valor 5 , en otras palabras '5' es una expresin con el valor 5 (en este caso, '5' es una constante entera). Por lo general se consideran tres tipos de expresiones: Aritmticas, relacionales y lgicas. Expresiones aritmticas: Son todas aquellas que estn formadas por operandos y operadores aritmticos y obtienen un resultado numrico. Por ejemplo: $numero1=10; $numero2=20; $x= $numero1 + $numero2; Expresiones relacionales: Son todas aquellas expresiones que estn formadas por operandos y operadores relacionales. Devuelven un valor booleano (true o false).

?>

Por ejemplo: if ( $numero1 > $numero2) echo Mayor=$numero1; Expresiones lgicas: Son aquellas que estn formadas por expresiones relacionales y operadores lgicos. De ellas se obtiene un valor booleano (true o false). Por ejemplo: Por ejemplo: if ( $numero1 > $numero2 && $numero1>$numero3) echo $mayor=$numero1; 2.2.6. Operadores. Un operador es un smbolo que permite realizar una asignacin, operacin o comparacin. Estn contemplados dentro de una expresin. Tipos de operadores: Operadores aritmticos

Ejemplo Nombre -$a Negacin $a + $b Adicin $a - $b Substraccin $a * $b Multiplicacin $a / $b Divisin $a % $b Mdulo

Resultado El opuesto de $a. Suma de $a y $b. Diferencia entre $a y $b. Producto de $a y $b. Cociente de $a y $b. Resto de $a dividido por $b.

El operador de divisin ("/") devuelve un valor flotante en todos los casos, incluso si los dos operandos son enteros (o cadenas que son convertidas a enteros). Nota: El resto de $a % $b es negativo para valores negativos de $a. Operadores de asignacin Asignacin simple: Formato: Variable = Expresin; Se evala la expresin luego el resultado es asignado a la variable. Ejemplo: $x=10 + 2;

Asignacin compuesta: Formato: Variable operador= Expresin; Ejemplos: $a += $b; //Suma $a y $b y se asigna a $a $a -= $b; //Resta $a y $b y se asigna a $a $a *= $b; //Multiplica $a por $b y lo asigna a $a $a /= $b; //Divide $a por $b y lo asigna a $a $a .= $b; //Aade la cadena $b a la cadena $a Operadores de Comparacin: $a < $b $a > $b $a <= $b $a >= $b $a == $b $a != $b Operadores Lgicos: $a AND $b $a && $b $a OR $b $a !! $b $a XOR $b !$a Operadores Bit a Bit Verdadero si ambos son verdadero Verdadero si ambos son verdadero Verdadero si alguno de los dos es verdadero Verdadero si alguno de los dos es verdadero Verdadero si slo uno de los dos es verdadero Verdadero si $a es falso $a menor que $b $a mayor que $b $a menor o igual que $b $a mayor o igual que $b $a igual que $b $a distinto que $b

Los operadores bit a bit le permiten activar o desactivar bits individuales de un entero. Si los parmetros tanto a la izquierda y a la derecha son cadenas, el operador bit a bit trabajar sobre los valores ASCII de los caracteres. <?php echo 12 ^ 9; echo "12" ^ "9"; // Imprime '5' // Imprime el caracter Backspace (ascii 8) // ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8 echo "hallo" ^ "hello"; // Imprime los valores ascii #0 #4 #0 #0 #0 // 'a' ^ 'e' = #4

?>

Operadores Bit a Bit

Ejemplo $a & $b $a | $b $a ^ $b ~ $a $a << $b Y O

Nombre

O exclusivo (Xor) No

Desplazamiento a izquierda Desplazamiento a $a >> $b derecha

Resultado Los bits que estn activos tanto en $a como en $b son activados. Los bits que estn activos ya sea en $a o en $b son activados. Los bitos que estn activos en $a o $b, pero no en ambos, son activados. Los bits que estn activos en $a son desactivados, y viceversa. Desplaza los bits de $a, $b pasos a la izquierda (cada paso quiere decir "multiplicar por dos") Desplaza los bits de $a, $b pasos a la derecha (cada paso quiere decir "dividir por dos")

Operadores de Incremento/Decremento

PHP ofrece soporte de operadores de pre- y post-incremento y decremento, estilo-C. Nota: Los operadores de incremento/decremento no afectan a los valores booleanos. Decrementar valores NULL tampoco tiene efecto, aunque incrementarlos resulta en 1. Ejemplo Nombre ++$a Pre-incremento $a++ Post-incremento --$a Pre-decremento $a-Post-decremento Efecto Incrementa $a en uno, y luego devuelve $a. Devuelve $a, y luego incrementa $a en uno. Decrementa $a en uno, luego devuelve $a. Devuelve $a, luego decrementa $a en uno.

Aqu hay un script sencillo de ejemplo: <?php echo "<h3>Postincremento</h3>"; $a = 5; echo "Debe ser 5: " . $a++ . "<br />\n"; echo "Debe ser 6: " . $a . "<br />\n"; echo "<h3>Preincremento</h3>"; $a = 5; echo "Debe ser 6: " . ++$a . "<br />\n"; echo "Debe ser 6: " . $a . "<br />\n"; echo "<h3>Postdecremento</h3>"; $a = 5; echo "Debe ser 5: " . $a-- . "<br />\n"; echo "Debe ser 4: " . $a . "<br />\n";

echo "<h3>Predecremento</h3>"; $a = 5; echo "Debe ser 4: " . --$a . "<br />\n"; echo "Debe ser 4: " . $a . "<br />\n"; ?> PHP sigue la convencin de Perl cuando trabaja con operaciones aritmticas sobre variables de caracter, y no la convencin de C. Por ejemplo, en Perl 'Z'+1 se convierte en 'AA', mientras que en C 'Z'+1 se convierte en '[' ( ord('Z') == 90, ord('[') == 91 ). Note que las variables de caracter pueden ser incrementadas pero no decrementadas. Ejemplo: Operaciones Aritmticas sobre Variables de Caracter <?php $i = 'W'; for ($n=0; $n<6; $n++) { echo ++$i . "\n"; } ?> El resultado del ejemplo seria: X Y Z AA AB AC Incrementar o decrementar valores booleanos no tiene efecto. Operadores de concatenacin.

Existen dos operadores para datos tipo string. El primero es el operador de concatenacin ('.'), el cual devuelve el resultado de concatenar sus argumentas a lado derecho e izquierdo. El segundo es el operador de asignacin sobre concatenacin ('.='), el cual adiciona el argumento del lado derecho al argumento en el lado izquierdo. Ejemplo: <?php $a = "&iexcl;Hola "; $b = $a . "Mundo!"; // ahora $b contiene "&iexcl;Hola Mundo!" $a = "&iexcl;Hola "; $a .= "Mundo!"; // ahora $a contiene "&iexcl;Hola Mundo!" Operador Ternario

?>

Los operadores que hemos visto hasta ahora son capaces de manejar un operando (unarios) o dos operandos (binarios). El operador ternario, o de comparacin, evala un operando y, dependiendo de si es falso o verdadero, evala el segundo operando o el tercero.

La expresin que se quiere evaluar se escribe delante de un smbolo (?), despus la expresin que tiene que ejecutarse si la evaluacin anterior es true, seguida del smbolo (:) con la expresin que debe ejecutarse si es Falso <?php $numero1 = 10; $numero2 = 25; $mayor = $numero1>numero2 ?$numero1 : $numero2; echo $mayor; ?> Orden de prioridad de los operadores. Informacin Adicional new array() incremento/decremento tipos aritmtica aritmtica, y cadena manejo de bits comparacin comparacin manejo de bits, y referencias manejo de bits manejo de bits lgicos lgicos ternario asignacin lgicos lgicos lgicos varios usos

Asociatividad Operadores no-asociativo new Izquierda [ no-asociativos ++ -no-asociativos ! ~ - (int) (float) (string) (array) (object) @ Izquierda */% Izquierda +-. Izquierda << >> no-asociativos < <= > >= no-asociativos == != === !== izquierda & izquierda ^ izquierda | izquierda && izquierda || izquierda ?: derecha = += -= *= /= .= %= &= |= ^= <<= >>= izquierda and izquierda xor izquierda or izquierda ,

La asociatividad de izquierda quiere decir que la expresin es evaluada desde la izquierda a la derecha, la asociatividad de derecha quiere decir lo contrario. Ejemplo: Asociatividad <?php $a = 3 * 3 % 5; // (3 * 3) % 5 = 4 $a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2 $a = 1; $b = 2; $a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5 ?>

Use parntesis para incrementar la legibilidad del cdigo.

UNIDAD III. ESTRUCTURAS DE CONTROL Todo script PHP se compone de una serie de sentencias. Una sentencia puede ser una asignacin, una llamada a funcin, un bucle, una sentencia condicional e incluso una sentencia que no haga nada (una sentencia vaca). Las sentencias normalmente acaban con punto y coma. Adems, las sentencias pueden agruparse en un bloque (dos o mas sentencias) con llaves. Un grupo de sentencias es tambin una sentencia. En este captulo se describen los diferentes tipos de sentencias. 3.1 Sentencias condicionales 3.1.1 Sentencia Simple if(). La construccin if es una de las ms importantes caractersticas de muchos lenguajes, incluido PHP. Permite la ejecucin condicional de fragmentos de cdigo. PHP caracteriza una estructura if que es similar a la de C: <?php if (expr) sentencia ?> En donde expr se evala a su valor condicional (boolean). Si expr se evala como TRUE, PHP ejecutar la sentencia, y si se evala como FALSE - la ignorar. El siguiente ejemplo mostrara a es mayor que b si $a fuera mayor que $b: <?php if ($a > $b) print "a es mayor que b"; ?> A menudo, se desea tener ms de una sentencia ejecutada de forma condicional. Por supuesto, no hay necesidad de encerrar cada sentencia con una clusula if. En vez de eso, se pueden agrupar varias sentencias en un grupo de sentencias. Por ejemplo, este cdigo mostrara a es mayor que b si $a fuera mayor que $b, y entonces asignara el valor de $a a $b: <?php if ($a > $b) { print "a es mayor que b"; $b = $a; } ?>

Las sentencias if se pueden anidar indefinidamente dentro de otras sentencias if, lo cual proporciona una flexibilidad completa para ejecuciones condicionales en las diferentes partes de tu programa. 3.1.2. Sentencia Doble. if ()... else A menudo queremos ejecutar una sentencia si se cumple una cierta condicin, y una sentencia distinta si la condicin no se cumple. Esto es para lo que sirve else. else extiende una sentencia if para ejecutar una sentencia en caso de que la expresin en la sentencia if se evale como FALSE. Por ejemplo, el siguiente cdigo mostrara a es mayor que b si $a fuera mayor que $b, y a NO es mayor que b en cualquier otro caso: <?php if ($a > $b) { print "a es mayor que b"; } else { print "a NO es mayor que b"; } ?> La sentencia else se ejecuta solamente si la expresin if se evala como FALSE. 3.1.3. Sentencia Mltiple if()...elseif ()... Esta sentencia es una combinacin de if y else. Como else, extiende una sentencia if para ejecutar una sentencia diferente en caso de que la expresin if original se evala como FALSE. No obstante, a diferencia de else, ejecutar esa expresin alternativa solamente si la expresin condicional elseif se evala como TRUE. Por ejemplo, el siguiente cdigo mostrara a es mayor que b, a es igual a b o a es menor que b: <?php if ($a > $b) { print "a es mayor que b"; } elseif ($a == $b) { print "a es igual que b"; } else { print "a es mayor que b"; } ?> Puede haber varios elseif dentro de la misma sentencia if. La primera expresin elseif (si hay alguna) que se evale como TRUE se ejecutara. En PHP, tambin se puede escribir 'else if' (con dos palabras) y el comportamiento sera idntico al de un 'elseif' (una sola palabra). El significado sintctico es ligeramente distinto (si estas familiarizado con C, es el mismo comportamiento) pero la lnea bsica es que ambos resultaran tener exactamente el mismo comportamiento. La sentencia elseif se ejecuta slo si la expresin if precedente y cualquier expresin elseif precedente se evalan como FALSE. 3.1.4. Sentencia Anidada if()...if()...

El if anidado o anillado consiste en que dentro de una sentencia if exista otra sentencia if. Su representacin general es: if (Condicion 1) { if (Condicion 1.1) { Instruccin 1; Instruccin 2; } } else { if (Condicion 2) { Instruccin A; Instruccin B; } else { Instruccin X; Instruccin Z; } }

De este modo se pueden introducir tantas condiciones como se quiera dentro de la condicin principal. 3.1.5 Sentencia if compacta. ? ... : ...; Podemos incluir clusulas condicionales simples con una sintaxis abreviada:

(condicin) ? (cdigo a ejecutar si se da la condicin) : (se ejecuta si no se da) El primer parntesis contiene la condicin; el segundo el cdigo a ejecutar si la condicin es verdadera; el tercero el cdigo a ejecutar si la condicin es falsa. Esta sentencia de control ya fue vista como operador ternario. Ejemplo: <?php ?>

$num = 4; ($num %2 == 0) ? (echo "$num es par ") : (echo "$num no es par");

equivale a : <?php $num = 4; if ($num % 2 == 0) echo "$num es par";

?>

else echo "$num no es par" 3.1.6. Sentencia switch().

Las instrucciones if...elseif...else permiten seleccionar entre ms de dos posibles condiciones que puedan ser evaluadas como true o false, pero en ocasiones nos encontrarmos con casos en que queremos evaluar condiciones con una estructura como esta: If ($variable==Valor1) { ... Sentencias; } else if($variable==Valor2) { ... Sentencias; } else if($variable==Valor3) { ... Sentencias; }else { ... Sentencias; } En las que esperamos realizar una accin determinada segn el valor tomado por una variable. Para estos casos la mayora de los lenguajes de programacin incluyen una instruccin que permite "seleccionar" entre los posibles valores de una variable: la instruccin switch (en espaol: SELECCIONAR). Estructura: switch($variable) { case Valor1: ... Sentencias; break; case Valor2: ... Sentencias; break; case Valor3: ... Sentencias; break; . . . default: ... Sentencias; } En esta estructura, $variable es la variable que ser comparada sucesivamente con cada una de las instrucciones case hasta hallar la que corresponda al valor de $variable, una vez que

la encuentre se ejecutarn sucesivamente todas las instrucciones pertenecientes al switch hasta hallar la siguiente instruccin break; esta ltima hace un salto pasando el control del programa a la instruccin inmediata siguiente fuera del switch. Si ninguna de las instrucciones case corresponde al valor de $variable se ejecutarn solo las instrucciones siguientes al default. Al igual que else, la instruccin default es opcional. Veamos un ejemplo: Usando if...elsefif...else Usando switch

<?php <?php $variable=2; $variable=2; if($variable==1) switch($variable) echo '$Variable es igual a 1.'; { elseif($variable==2) case 1: echo '$Variable es igual a 2.'; echo '$Variable es igual a 1.'; elseif($variable==3) break; echo '$Variable es igual a 3.'; case 2: else echo '$Variable es igual a 2.'; echo '$Variable no es igual ' . break; 'a 1, 2 o 3.'; case 3: ?> echo '$Variable es igual a 3.'; break; default: echo '$Variable no es igual ' . 'a 1, 2 o 3.'; } ?> El resultado de ambas formas ser: $Variable es igual a 2. Si por el contrario cambiamos $Variable=2 por $Variable=5 al inicio de cdigo el resultado sera: $Variable no es igual a 1, 2 o 3. Una diferencia importante respecto a las instrucciones if...elseif...else es que se requiere de la instruccin break para salir del switch al terminar las instrucciones correspondientes a un case. Esto es as debido a que solo podemos especificar un valor en cada case. Veamos un ejemplo: Usando if...elsefif...else <?php $variable=2; if($variable==1) { echo '$Variable es igual a 1.'; } Usando switch <?php $variable=2; switch($variable) { case 1: //Se ejecuta si $variable vale 1

elseif($variable==2 || $variable==3) { echo '$Variable es igual a 2 o 3.'; }else { echo '$Variable no es igual ' . 'a 1, 2 o 3.'; } ?>

echo '$Variable es igual a 1.'; break; case 2: case 3: //Se ejecuta si $variable vale 2 o 3 echo '$Variable es igual a ' . '2 o 3.'; break; default: //Se ejecuta en cualquier otro caso echo '$Variable no es igual ' . 'a 1, 2 o 3.'; } ?>

En cualquiera de las dos formas mostradas, la salida obtenida sera: $Variable es igual a 2 o 3. En este caso, al evaluarse la segunda instruccin case no se encuentra ningn break por lo que siguen ejecutndose las instrucciones siguientes al tercer case, aun cuando $Variable es diferente de 3. Ms an, si borramos el break del tercer case tambin se ejecutarn las instrucciones siguientes a default, y la salida sera entonces: $Variable es igual a 2 o 3. $Variable no es igual a 1, 2 o 3.

3.2 SENTENCIAS REPETITIVAS. 3.2.1. Sentencia for() Los bucles for son los bucles ms complejos en PHP. Se comportan como su contrapartida en C. La sintaxis de un bucle for es: for (expr1; expr2; expr3) sentencia; La primera expresin (expr1) se evala (ejecuta) incondicionalmente una vez al principio del bucle. Al comienzo de cada iteracin, se evala expr2 . Si se evala como TRUE, el bucle contina y las sentencias anidadas se ejecutan. Si se evala como FALSE, la ejecucin del bucle finaliza. Al final de cada iteracin, se evala (ejecuta) expr3. Cada una de las expresiones puede estar vaca. Que expr2 est vaca significa que el bucle debera correr indefinidamente (PHP implcitamente lo considera como TRUE, al igual que

C). Esto puede que no sea tan intil como se podra pensar, puesto que a menudo se quiere salir de un bucle usando una sentencia break condicional en vez de usar la condicin de for. Considera los siguientes ejemplos. Todos ellos muestran nmeros del 1 al 10: <?php /* ejemplo 1 */ for ($i = 1; $i <= 10; $i++) { print $i; } /* ejemplo 2 */ for ($i = 1; ;$i++) { if ($i > 10) { break; } print $i; } /* ejemplo 3 */ $i = 1; for (;;) { if ($i > 10) { break; } print $i; $i++; } /* ejemplo 4 */ for ($i = 1; $i <= 10; print $i, $i++) ; ?> Por supuesto, el primer ejemplo parece ser el mas elegante (o quizs el cuarto), pero uno puede descubrir que ser capaz de usar expresiones vacas en bucles for resulta til en muchas ocasiones 3.2.2. Setencia foreach La sentencia foreach funciona solamente con arreglos y devolver un error si se intenta utilizar con otro tipo de datos variables no inicializadas. Hay dos sintaxis; la segunda es una extensin menor, pero til de la primera: foreach(expresion_array as $value) sentencia; foreach(expresion_array as $key => $value) sentencia;

La primera forma recorre el array dado por expresion_array. En cada iteracin, el valor del elemento actual se asigna a $value y el puntero interno del array se avanza en una unidad (as en el siguiente paso, se estar mirando el elemento siguiente). La segunda manera hace lo mismo, salvo que la clave del elemento actual ser asignada a la variable $key en cada iteracin. Cuando foreach comienza su primera ejecucin, el puntero interno del array se reinicia automticamente al primer elemento del array, por lo que no es necesario llamar a reset() antes de un bucle foreach. Esto significa que inicialmente el puntero interno est sealando al primer elemento del array sin necesidad de forzar este comportamiento. Veamos algunos ejemplos: Ejemplo 1. Imprimir los valores de un array <?php

//foreach para mostrar slo los valores de un array $numeros = array(3, 7, 17, 22); foreach($numeros as $num) { echo "Valor actual de \$numeros: $num.<br>"; }

?> Ejemplo 2. //foreach para mostrar ndices y valores <?php $numeros = array(3, 7, 17, 22); foreach($numeros as $indice=>$num) { echo "\$numeros[$indice]= $num.<br>"; } ?> Ejemplo 3. foreach para mostrar claves y valores <?php $numeros = array("primero"=>3, "segundo"=> 7, "tercero"=>17, "cuarto"=>22); foreach($numeros as $clave=>$num) { echo "\$numeros[$clave]= $num.<br>"; }

?>

3.2.3. Sentencia while( ) Los bucles while son los tipos de bucle ms simples en PHP. La forma bsica de una sentencia while es: while (expr)

sentencia; El significado de una sentencia while es el siguiente: Se ejecutarn la(s) sentencia(s) anidada(s) repetidamente mientras la expresin while se evale como TRUE. El valor de la expresin es comprobado cada vez al principio del bucle, as que incluso si este valor cambia durante la ejecucin de la(s) sentencia(s) anidada(s), la ejecucin no parar hasta el fin de la iteracin (cada vez que PHP ejecuta las sentencias en el bucle es una iteracin). Si la expresin while se evala como FALSE desde el principio de todo, la(s) sentencia(s) anidada(s) no se ejecutarn ni siquiera una vez. El siguiente ejemplo muestra por pantalla los nmeros naturales del 1 al 10: <?php $i = 1; while ($i <= 10) { echo $i++." "; } ?> 3.2.4. Sentencia do.. while( ). Los bucles do..while son similares a los bucles while, excepto que las condiciones se comprueban al final de cada iteracin en vez de al principio. La principal diferencia frente a los bucles while es que se garantiza la ejecucin de la primera iteracin de un bucle do..while (la condicin se comprueba slo al final de la iteracin), mientras que puede no ser necesariamente ejecutada con un bucle while regular (la condicin se comprueba al principio de cada iteracin, si esta se evala como FALSE desde el principio, la ejecucin del bucle finalizar inmediatamente). Sintaxis para el bucle do..while: do{ sentencia(s); }while (expr) ; Ejemplo: <?php $i = 1; do{ echo $i++." "; }while ($i <= 10) ; ?> 3.2.5. Sentecias break y continue. Sentencia break.

La instruccin break (Espaol: Interrupcin) interrumpe inmediatamente la ejecucin de un ciclo y el control se pasa a la instruccin inmediatamente posterior al cierre de la sentencia for, while o do..while. Veamos un ejemplo con while para romper un ciclo: <?php $n = 1; $i = 1; while(true){ $i = $i + 1; $n = $n * $i; if ($n > 100) break; } echo "i = " . $i; echo "<br/>n = " . $n;

?>

La sentencia break acepta un parmetro opcional, el cual determina cuantas estructuras de control hay que escapar. <?php $i = 0; while (++$i) { switch ($i) { case 5: echo "Estamos en el 5<br>"; break 1; /* Salimos del switch pero no del while. Equivalentemente se podra haber escrito break; */ case 10: echo "Estamos en el 10. <br>"; break 2; /* Salimos del switch y del while. */ default: break; }

} ?>

Sentencia continue. La sentencia continue se usa dentro de la estructura del bucle para saltar el resto de la iteracin actual del bucle y continuar la ejecucin al comienzo de la siguiente iteracin.

Acepta un parmetro opcional, el cual determina cuantos niveles (bucles) hay que saltar antes de continuar con la ejecucin. <?php $num=0; while ($num++<10) { if ($num % 2) { // salta los nmeros impares continue; } echo($num."<br>"); } $i = 0; while ($i++ < 4) { echo "Primero<br>"; while (1) { echo "Segundo<br>"; while (1) { echo "Tercero<br>"; continue 3; } echo "Esto nunca se escribe.<br>"; } echo "Ni esto tampoco.<br>"; }

?>

3.3. INCLUSION DE FICHEROS. Las construcciones include y require son de las mas conocidas en php. Con ellas puedes reutilizar porciones de cdigo (script, o simple html) cuantas veces quieras, siendo uno de sus usos mas sencillos y tpicos el de incluir cabeceras y pies de pginas en un sistema de plantillas. 3.3.1 Sentencia include( ). La sentencia include() inserta y evala el archivo especificado. Puedes incluir aqu no solamente un fichero en tu servidor, sino una pgina web remota (indicando la url). Su uso tpico sera: <?php include ("archivo.php"); ?> Llama al archivo .php y lo inserta en el propio punto del script donde hacemos la llamada. Tanto si insertamos un archivo con include() o require(), debes tener en cuenta que PHP pasa a modo html hasta el final del mismo, por lo que si el archivo a insertar contiene cdigo php que deba ser evaluado (ejecutado), debe ser encerrado dentro de etiquetas de comienzo y fin de PHP. Puedes tambin utilizar varios include anidados (es decir, utilizar include para llamar a otro archivo, dentro del archivo a incluir), con la unica precaucion de tener en cuenta que los archivos que se van insertando se ejecutan en el entorno del archivo primero que contiene

la llamada, lo que es importante al establecer los paths. Por ejemplo, si tienes dos archivos, encabezado.php y pie.php en un directorio llamado anexos y llamas al primero desde fuera de ese directorio, lo harias as: include ("anexos/encabezados.php"); y si encabezados.php contiene una llamada a otro archivo pie.php, debes escribir la llamada tambin como include ("anexos/pie.php"); puesto que aunque encabezado.php y pie.php estn en el mismo directorio, la llamada a ambos es desde fuera, desde la misma posicin que el script que hace la llamada. Ejemplo bsico de la funcin include() Archivo: vars.php <?php ?> $color = 'verde'; $fruta = 'manzana';

Archivo: include1.php <?php echo "Una $fruta $color"; // Una include (vars.php); echo "Una $fruta $color"; // Una manzana verde ?> Otro ejemplo muy comn para encabezados y pginas.

Archivo: encapie.php <?php function CabeceraPagina() { ?> <CENTER> <FONT SIZE="+1">Instituto Tecnolgico del Valle de Oaxaca.</FONT><BR> </CENTER> <hr> <? } function PiePagina() { ?> <hr> <FONT SIZE="-1"> Benedicto Ramirez S.</FONT><BR>

?>

<? }

Archivo include2.php <?php include("encapie.php"); CabeceraPagina(); echo "Una $fruta $color". "<BR>"; // Una include ("vars.php"); echo "Una $fruta $color"; // Una manzana verde echo "<BR> <BR> <BR> <BR>"; PiePagina();

?> 3.3.2 Sentencia include_once( ). La funcin include_once() incluye y evala el fichero especificado durante la ejecucin del script. Se comporta de manera similar a include(), con la nica diferencia que si el cdigo ha sido ya incluido, no se volver a incluir. La funcin include_once() debera de usarse en casos en los que, un mismo fichero puede ser incluido y evaluado ms de una vez durante la ejecucin de un script, y se quiere estar seguro que se incluye una sola vez para evitar problemas con redefiniciones de funciones, o la reasignacin de valores a variables . Esta funcin distingue entre maysculas y minsculas; su funcionamiento puede no ser el esperado si el intrprete de php se ejecuta sobre un sistema operativo que no hace tales distinciones como windows. Ejemplo: //Archivo cabecara.inc <h3>cabecera</h3> //Archivo cuerpo.inc <?php $resultado=1; for($i=1;$i<=abs($exponente);$i++){ $resultado*=$base; } if( $exponente<0){ $resultado=1/$resultado; echo $base<sup>$exponente</sup>=; echo <b>$resultado</b>; > //Archivo pie.inc

<br> <h3> Ultimo resultado<?=$resultado > >/h3>

<html> <head> <title> Trabajando con include_once </title> </head> <body> <center> <h2> Inclusin de ficheros </h2> <?php // se incluye una cabecera html include_once(cabecera.inc); //el fichero cuerpo.inc hace uso de la variables //$base y $exponente $base=2; $exponente=-3; include_once(cuerpo.inc); echo <br> Primera inclusin de cuerpo.inc <hr width=40>; $base=7; $exponente=5; include_once(cuerpo.inc); echo <br> Segunda inclusin de cuerpo.inc <hr width=40>; $base=9; $exponente=7; include_once(cuerpo.inc); echo <br> Tercera inclusin de cuerpo.inc <hr width=40>; //se incluye un fichero que hace uso de variables definidas //en cuerpo.inc include_once(pie.inc); > </center> </body> </html> La pantalla que presenta es: Inclusin de ficheros cabecera 2-3=0.125 Primera inclusin de 'cuerpo.inc' Segunda inclusin de 'cuerpo.inc' Tercera inclusin de 'cuerpo.inc' Ultimo resultado >/h3>

Comparndola con la que presentara la funcin include:

Inclusin de ficheros cabecera 2-3=0.125 Primera inclusin de 'cuerpo.inc' 75=16807 Segunda inclusin de 'cuerpo.inc' 97=4782969 Tercera inclusin de 'cuerpo.inc' Ultimo resultado >/h3>

3.3.3. Sentencia require() . Esta funcin se comporta en lneas generales como la funcin include (), pero con las siguientes salvedades: 1. require() solo incluye el fichero referenciado, es decir, no lo interpreta. Su comportamiento es equivalente a la directiva #include del lenguaje C. 2. require() no puede ser utilizado con estructuras condicionales o de control de bucles porque el contenido del fichero referenciado se incluye siempre aunque la funcin que lo contiene no se cumpla. No obstante, si la lnea en la que aparece require() no se ejecuta, tampoco se ejecutara el cdigo del archivo al que sta llamada haga referencia. 3. En caso de que el fichero referenciado por require () no exista, se genera un error fatal que no nos permite continuar con la ejecucin del script La sentencia require() e include() son idnticas en todos los aspectos excepto en el modo de actuar ante un error. include() produce un Warning mientras que require() produce un Error Fatal. En otras palabras, no dude en utilizar require() si quiere que un fichero no encontrado cuelgue el procesamiento de la pgina. include() no se comporta de esta manera, el script seguir funcionando de todas maneras. Asegurarse que include_path (include_path=".;c:\php\includes") este configurado bien.

Cuando un fichero es incluido, el cdigo que contiene hereda la variable scope de la lnea en donde el include ocurre. Cualquier variable disponible en esa lnea en el fichero desde donde se hace la inclusin estar disponible en el fichero incluido a partir de ese momento. La diferencia documentada entre include y require consistira en que la llamada con include podra hacerse condicionalmente. A diferencia de include(), require() siempre leer el archivo referenciado, incluso si la lnea en que est no se ejecuta nunca. Si se quiere incluir condicionalmente un archivo, se usa include(). La sentencia conditional no afecta a require(), aunque si la lnea en la cual aparece el require() no se ejecuta, tampoco se ejecutar el cdigo del archivo referido. Sin embargo, a partir de la versin PHP 4.0.2 y posteriores esto ya no es as y ambas construcciones se comportan exactamente de la misma manera, con la nica diferencia de que si el archivo llamado no existe, include solo da una advertencia, y sigue ejecutando el cdigo, mientras que require produce un error e interrumpe la ejecucin. 3.3.4. Sentencia require_once( ).

De igual forma que include( ) cuenta con la funcin include_once(), para evitar la carga en mas de una ocasin de un fichero, require() hace lo propio con la funcin require_once(), la cual tiene un comportamiento equivalente.

UNIDAD IV. CADENAS Y ARREGLOS.

4.1.

Cadenas. 4.1.1 Delimitacin de cadenas

Una cadena es un conjunto de caracteres encerrados entre comillas dobles o apstrofes. Ejemplo: Instituto Tecnolgico del valle de Oaxaca Todo lo que introduzcamos dentro de las comillas aparecer y se almacenar como tal. En el caso de que necesitemos incluir una comilla simple en el texto, debemos escaparla. Para ello usaremos la barra invertida ( \ ) antes de la comilla ( \' ). En el caso de que deseemos aadir una barra invertida al final de una cadena o antes de una comilla simple, deberemos escapar la propia barra invertida ( \\ ). En cualquier otro caso, la barra invertida aparecer normalmente. El funcionamiento de la barra invertida es similar en cadenas de comillas simples y dobles. Se aplica a una serie de letras o smbolos que, cuando son escapadas, adquieren otro significado: \n \r \t \$ \" \\ \### \x## Nueva lnea Retorno de carro Tabulador Signo del dlar Comillas dobles Barra invertida Carcter representado por 1, 2 3 cifras ( # ) en cdigo octal Carcter representado por 1 2 cifras en cdigo hexadecimal

La unin de cadenas se realiza a travs del uso del punto. Ejemplo: echo Escuela de procedencia.Instituto Tecnolgico del Valle de Oaxaca; A continuacin menciono algunas funciones mas utilizadas en php. 1. chr(n) Devuelve el carcter cuyo cdigo ASCII es n. 2. ord(cadena) Devuelve el cdigo ASCII del primer carcter de la cadena 3. strlen(cadena) Devuelve la longitud (n de caracteres incluidos los espacios) de la cadena 4. count_char($a,0) Devuelve un array cuyos indices son los cdigos ASCII de los caracteres y cuyos valores son el nmero de veces que se repite cada uno de ellos. 4.1.2. Visualizacin de cademas.

A continuacin presento las funciones que se emplean en php para la visualizacin de cadenas echo: Es el modo de visualizacin mas empleado. Su sintaxis es la siguiente: echo "texto";

print: Es la mas sencilla de todas y se encarga de mostrar una cadena de caracteres sobre su salida estndar. No soporta ningn formato de salida y su sintaxis es: print(cadena); printf(formato,[valores]); Su funcionamiento es el mismo que en el caso anterior. La nica diferencia es que este soporta formatos de salida como su alineacin (por defecto a la izquierda), valor numrico ( nmero mnimo de caracteres que deben mostrarse), numero de decimales y tipo de datos cuyas posibilidades son: Significado Representa el smbolo del porcentaje El argumento se trata como n entero y se representa en codificacin binaria. El argumento se trata como n entero y se muestra el caracter cuyo cdigo ASCII se corresponde con el valor. El argumento se trata como n entero y se representa en codificacin decimal sin parte fraccionaria El argumento se trata como un n de tipo double y se representa como un decimal sin coma flotante El argumento se trata como un n entero y se representa en codificacin octal El argumento se trata y representa como una cadena de caracteres El argumento se considera un n entero y se representa en codificacin hexadecimal en minsculas El argumento se considera un n entero y se representa en codificacin hexadecimal en maysculas

Smbolo % b c d f o s x X -

sprintf(formato,[valores]); su funcionamiento es idntico a printf. Lo nico que se diferencia es que la cadena resultante se guarda en una variable. 4.1.3. Acceso al contenido

Una cadena puede manipularse como una estructura de datos, en donde cada caracter se almacena de manera consecutiva y se puede tener acceso a cualquier elemento a travs del nombre de la cadena y su ndice. Por ejemplo: 4.1.4. Bsqueda en cadenas

La funciones que se aplican por lo general son las siguientes: 1. strstr($A,$B) Busca la subcadena $B dentro de la cadena $A y devuelve toda la cadena $A a partir de la primera aparicin de la subcadena $B. Es sensible a maysculas y minsculas. 2. strchr($A,$B) Esta funcin es idntica a la anterior. Se trata de un alias de ella. 3. stristr($A,$B) Idntica a la funcin anterior pero insensible a maysculas y minsculas. 4. strrchr($A,$B) Busca la subcadena $B dentro de la cadena $A y devuelve toda la cadena $A a partir de la ltima aparicin de la subcadena $B. Es sensible a maysculas y minsculas.

5. strpos($A,$B) Busca la subcadena $B dentro de la cadena $A y devuelve la posicin en la que se produce la primera aparicin de la subcadena $B. Es sensible a maysculas y minsculas. 6. strrpos($A,$B) Busca la subcadena $B dentro de la cadena $A y devuelve la posicin en la que se produce la ltima aparicin de la subcadena $B. Es sensible a maysculas y minsculas. 4.1.5. Comparacin de cadenas

La comparacin de cadenas en php es similar al lenguaje C, veamos las siguientes funciones: 1. similar_text($A,$B) Esta funcin calcula la similitud entre dos cadenas. Devuelve el nmero de caracteres coincidentes en ambas cadenas. 2. strcasecmp($A,$B) Esta funcin compara cadenas sin diferencias maysculas de minsculas. Cuando coinciden devuelve CERO, cuando la primera cadena es mayor que la segunda devuelve un valor positivo y en el caso contrario devuelve un valor negativo. 3. strcmp($A,$B) Compara ambas cadenas diferenciando entre maysculas y minsculas. Cuando son idnticas devuelve cero, en caso de no ser iguales devuelve +1 -1. 4. strnatcmp($A,$B) Similar a la anterior. Parece que la nica diferencia es que esta funcin utiliza un algoritmo de orden natural. 5. strnatcasecmp($A,$B) Similar a la anterior. Tambin utiliza un algoritmo de orden natural, pero en este caso no diferencia maysculas de minsculas. 6. strncmp($A,$B,n) Similar a strcmp(). Diferencia maysculas de minsculas y solo compara los n primeros caracteres de ambas cadenas 7. strspn($A,$B) Determina el nmero de caracteres (del comienzo de la cadena $A) que coinciden con alguno de los caracteres de la cadena $B. Diferencia entre maysculas y minsculas. 8. strcspn($A,$B) Determina el nmero de caracteres (del comienzo de la cadena $A) que no coinciden con alguno de los caracteres de la cadena $B. Discrimina entre maysculas y minsculas. 4.1.6 Operar con subcadenas 1. substr(cadena,n) Si el valor de n es positivo extrae todos los caracteres de la cadena a partir del que ocupa la posicin ensima a partir de la izquierda. Si n es negativo extrae los n ltimos caracteres de la cadena 5. substr(cadena,n,m) Si n y m son positivos extrae m caracteres a partir del que ocupa la posicin ensima contados de izquierda a derecha. a. Si n es negativo y m es positivo extrae m (contados de izquierda a derecha) a partir del que ocupa la posicin ensima contada de derecha a izquierda. b. Si n es positivo y m es negativo extrae la cadena comprendida entre el ensimo carcter (contados de izquierda a derecha) hasta el emsimo partir contado de derecha a izquierda. c. Si n es negativo y m tambin es negativo extrae la cadena comprendida entre el emsimo y el ensimo caracteres contado de derecha a izquierda d. Si el valor absoluto de n es menor que el de m devuelve una cadena vacia. 6. explode(sep,cad,n) Devuelve un array cuyos elementos contienen las porciones de la cadena (cad) comprendidas entre los caracteres sealados como (sep) hasta el mximo de porciones sealadas (n). Los caracteres separadores son eliminados de

las cadenas resultantes. Si no se indica el nmero de porciones, PHP fracciona en todas las necesarias. Si se indica, el ltimo trozo contendr el resto de la cadena hasta el final. 7. implode(sep,array) Devuelve una cadena formada por todos los elementos del array separados por los caracteres indicados en la cadena sep. 8. join(sep,array) Es una funcin idntica a implode. 9. strtok(cadena,sep) Esta funcin divide una cadena entrozos delimitados por el separador que se indica. Cada cuando se invoca la primera vez debe llevar las sintaxis strtok(cadena,sep) y extrae el primer trozo. Al invocarla sucesivamente con la sintaxis strtok (" ") va recogiendo de forma secuencial los trozos sucesivos. 10.bin2hex(cadena) Devuelve una cadena ASCII que contiene la representacin hexadecimal de la cadena. La conversin se realiza byte a byte, con los 4 bits superiores primero 11.md5(cadena,"xx") Aplica el algoritmo md5 y devuelve la huella digital generada por l. 12.crc32(cadena) Aplica el algoritmo crc32 de comprobacin de integridad y devuelve el valor del mismo. 13. substr_count($a,"cadena") Determina el nmero de veces que aparece la cadena dentro de la variable (o cadena) $a. Diferencia entre maysculas y o minsculas. 4.1.7 Modificacin del contenido. 1. strtolower(cadena) Cambia los caracteres de la cadena a minsculas 2. strtoupper(cadena) Convierte en maysculas todos los caracteres de la cadena 3. ucwords(cadena) Convierte a maysculas la primer letra de cada palabra 4. ucfirst(cadena) Convierte a maysculas la primer letra de la cadena y pone las restante en minsculas 5. ltrim(cadena) Elimina los espacios al principio de la cadena 6. rtrim(cadena) Elimina los espacios al final de la cadena 7. trim(cadena) Elimina los espacios tanto al principio como al final de la cadena 8. chop(cadena) Elimina los espacios al final de la cadena. Es un alias de rtrim. Advertencia: Tanto trim, como ltrim y rtrim eliminan adems de los espacios los caracteres protegidos \n, \r, \t, \v y \0. 9. strrev(cadena) Devuelve la cadena invertida 10. str_repeat(cadena, n) Devuelve la cadena repetida tantas veces como indica n. 11. str_pad("cadena",n,"Relleno",tipo). Donde n es el nmero de caracteres de la cadena final (deber ser mayor que la longitud de la cadena inicial) siendo "Relleno" la cadena (uno o varios caracteres escritos entre comillas) con la que se pretende rellenar y tipo uno de estos tres valores (sin comillas): STR_PAD_BOTH (rellena por ambos lados), STR_PAD_RIGHT (coloca el relleno a la derecha de la cadena), o STR_PAD_LEFT (coloca el relleno a la izquierda de la cadena). Si se omite la cadena de relleno completar con espacios y si se omite el tipo rellenar por la derecha 12. crypt(cadena) Devuelve la cadena encriptada utilizando una semilla aleatoria de dos caracteres. 13. crypt(cadena,"xx") Devuelve la cadena encriptada utilizando como semilla los dos caracteres (entre comillas) escritos como segundo parmetro de la funcin. Tanto en este supuesto como en el anterior, los dos primeros caracteres de la cadena generada representan la semilla utilizada.

14.levenshtein($A,$B) Devuelve la distancia Levenshtein que se define como el mnimo nmero de caracteres que se tienen que sustituir, insertar o borrar para transformar $A en $B. Si una de las cadenas tiene una longitud superior a 255 caracteres devuelve -1.

4.1.8 Relacionadas con HTML Para facilitar algunos de los problemas que tiene la transformacin de texto en cdigo html vlido, php proporciona las siguientes funciones entre otras: htmlspecialchars(cadena): Se encarga de convertir los caracteres con un significado especial en html en entidades html segn la tabla siguiente: Car. & < > Traduccin a entidad html &amp; &quot; &alt; &gt;

* htmlentities(cadena). Es similar a la funcin anterior, salvo que esta funcin traduce todos los caracteres a su correspondiente entidad en html. 4.2 Arrays. Los arrays en php nos permiten almacenar mltiples valores en una sola estructura y, de esta forma, asociarlos bajo una misma denominacin. 4.2.1 Arrays escalares Est formado por un conjunto de valores ordenados respecto a un ndice de tipo entero. Este ndice indicar la posicin del elemento. Formas para crear un array. La ms sencilla consiste en asignar el valor de cada elemento de manera explcita.

El siguiente cdigo de ejemplo nos muestra dos formas equivalentes: $matriz1[0]=cougar; $matriz1[1]=ford; $matriz[3]=2.500; $matriz1[4]=V6; $matriz1[5]=172; $matriz2[ ]=cougar; $matriz2[ ]=ford; $matriz2[ ]= ; $matriz2[ ]=2.500; $matriz2[ ]=V6;

$matriz2[ ]=172; Un array puede combinar elementos de naturaleza distinta: en el ejemplo vemos valores enteros y de cadena, e incluso elementos vacos. Adems si no indicamos la posicin de sus elementos, estos se van situando secuencialmente respecto a la ltima asignacin realizada. Sintaxis: $nombreArray= array ( elem1, elem2, elem3,.); Ejemplo: $matriz1= array(cougar, ford, null, 2.500,172); Los indices se asignan por defecto, de modo secuencial comenzando por la posicin 0. El constructor array( ) tambin nos permite asignar los elementos del array en el orden que queramos. Para ello, indicamos el ndice, seguido del smbolo => y el valor del elemento. Por ejemplo: $matriz1= array(cougar, ford, null, 2.500,v6,172); $matriz2= array(2=>cougar, ford,1=> null,0=> 2.500,v6,172); 4.2.2 Arrays asociativos Conocidos tambin como tablas hash o arrays indexados por cadena. Estn formados por un conjunto de valores que estn ordenados respecto a un ndice de tipo string. De este modo nuestro array va a estar compuesto por pares clave-valor, siendo necesario proporcionar la clave para poder acceder al valor almacenado en el array. Para este tipo de arrays se aplican las mismas formas de creacin de los arreglos escalares. Ejemplo: $matriz1= array(modelo=>cougar,marca=> ford,fecha=> null, cc=>2.500,motor=>v6,potencia=>172); $matriz2[modelo]=cougar; $matriz2[marca]=ford; $matriz2[fecha]=null; $matriz2[cc]= 2.500; $matriz2[motor]=V6; $matriz2[potencia]=172; La otra forma es utilizando el constructor array() proporcionado por el lenguaje.

4.2.3 Arrays multidimensionales Php permite definir arrays multidimensionales mediante la combinacin de arrays unidimensionales (que pueden ser escalares y/o asociativos. Ejemplos: De tipo escalar: $matriz1[0][0]=peseta; $matriz1[0][1]=166.386; $matriz1[1][0]=dlar; $matriz1[1][1]=0.96; $matriz2[0]= array(peseta,166.386); $matriz2[1]= array(dlar,0.96); Para escribir (imprimir) los elementos del arreglo se utiliza dos ciclos. Uno que controla las filas y otro para las columnas. De tipo asociativo: $matriz1[peseta][moneda]=peseta; $matriz1[peseta][cambio]=166.386; $matriz1[dlar][moneda]=dlar; $matriz1[dlar][cambio]=0.96; $matriz2[peseta]= array(moneda=>peseta,cambio=>166.386); $matriz2[dolar]= array(moneda=>dlar,cambio=>0.96); Para escribir (imprimir) los elementos del arreglo se utiliza el acceso de lnea por lnea. echo $matriz2[peseta][moneda]; Investigacin por el alumno. 4.2.4 Recorrer un array 4.2 5 Recorridos en arrays secuenciales 4.2.6 Recorridos en arrays no secuenciales 4.2.7 Ordenar un array 4.2.8 Modificar un array 4.2.9 Trabajando con porciones del array 4.2.10 Usando arrays como pilas UNIDAD V FUNCIONES CLASES Y OBJETOS

5.1 Trabajando con funciones Una funcin es una parte de cdigo dentro de un script que realiza una tarea especfica. Las funciones permiten escribir scripts mas sencillos, legibles y fciles de entender. 5.1.1 Declaracin de una funcin. function nombreFuncion([parmetros]) { //declaraciones locales //Cuerpo de la funcin [return valor;] } Los parmetros son las variables que reciben los valores de los argumentos y deben ir separados por comas. 5.1.2. Llamada a una funcin. Para la ejecucin de una funcin se requiere que esta sea llamada o invocada. Formato general para llamar a una funcin: nombreFuncion( [argumentos]); Los argumentos son los valores (o variables) que son enviados a la funcin y los reciba los parmetros. Los argumentos deben ir separados por comas. 5.1.3. Paso de parmetros. Paso por valor. Consiste en realizar una copia del valor de los argumentos hacia los parmetros. Ejemplo 1: <HTML> <HEAD> <TITLE>Trabajando con Funciones</TITLE> </HEAD> <BODY> <CENTER> <H2>Funciones de Usuario<I></I></H2> <?php function cuentaAtras(){ for($i=10;$i>0;$i--)

echo $i,"...<BR>"; echo " Booooom !";

?> <TABLE BORDER="0" CELLPADDING="4" CELLSPACING="6"> <TR ALIGN="center"> <TD BGCOLOR="#FFBBAA"> <?php cuentaAtras(); ?> </TD> <TD BGCOLOR="#FFFBAD"> <?php cuentaAtras(); ?> </TD> </TR> </TABLE> </CENTER> </BODY> </HTML> Ejemplo 2. <HTML> <HEAD> <TITLE>Trabajando con Funciones</TITLE> </HEAD> <BODY> <CENTER> <H2>Funciones de Usuario<I></I></H2> <?php define("Fin_Cuenta",0); $mifinal=3; function cuentaAtras($inicio, $fin){ for(;$inicio>$fin;$inicio--) echo $inicio,"...<BR>"; echo " Booooom !"; } ?> <TABLE BORDER="0" CELLPADDING="4" CELLSPACING="6"> <TR ALIGN="center"> <TD BGCOLOR="#FFBBAA"> <?php cuentaAtras(11,$mifinal); ?> </TD> <TD BGCOLOR="#FFFBAD">

<?php cuentaAtras(8,Fin_Cuenta); ?> </TD> </TR> </TABLE> </CENTER> </BODY> </HTML> Paso por referencia. Cuando queramos que los cambios que se producen en el cuerpo de la funcin afecten a la variable que se pas como argumento deberemos usar el paso por referencia. Para indicar qu parmetros se pasan por referencia, hay que marcarlos en la definicin de la funcin, anteponiendo el smbolo ampersand (&) al nombre del parmetro. Ejercicio : Realizar un script que permita intercambiar los valores de 2 variables. Parmetros por defecto (omisin). Se usan para tomar un valor predefinido cuando en la llamada no se especificado un argumento. Estos tienen que situarse al final de los parmetros normales, se debe escribir el nombre del parmetro, el signo = y adelante el valor que debe tomar. Ejemplo que aplica los tres tipos de parmetros. <HTML> <HEAD> <TITLE>Trabajando con Funciones</TITLE> </HEAD> <BODY> <CENTER> <H2>Funciones de Usuario<I></I></H2> <?php $mifinal=0; function cuentaAtras($inicio, &$fin, $mensaje=" Booooom !"){ for(;$inicio>$fin;$inicio--) echo $inicio,"...<BR>"; $fin=$fin+2; echo $mensaje; } ?> <TABLE BORDER="0" CELLPADDING="4" CELLSPACING="6"> <TR ALIGN="center"> <TD BGCOLOR="#FFBBAA"> <?php

// $mifinal vale 0 cuentaAtras(6,$mifinal); // $mifinal vale 2 ?> </TD> <TD BGCOLOR="#FFFBAD"> <?php // $mifinal vale 2 cuentaAtras(8,$mifinal," Despierta !"); // $mifinal vale 4 ?> </TD> </TR> </TABLE> </CENTER> </BODY> </HTML> 5.1.4. mbito de las variables. Variables globales. Son todas aquellas que se definen fuera de la funcin y son accesibles, desde cualquier punto del script. Las variables globales deben ser declaradas globales dentro de la funcin si van a ser utilizadas dentro de dicha funcin, anteponiendo a su definicin la palabra reservada global. Otro mtodo para acceder a las variables globales desde un mbito local es usando el array $GLOBALS (es un array asociativo con el nombre de la variable global como clave y los contenidos de dicha variable como el valor del elemento del array). Variables locales. Son las variables definidas dentro del cuerpo de una funcin y solo pueden ser accedidas dentro de la misma. Variables locales estticas. Son variables locales, se crean cada vez que se comienza a ejecutar la funcin que las define, y se destruyen cuando se acaba la funcin. Para evitar que una variable local pierda su valor entre diferentes llamadas a la funcin que la define, hay que definirla como variable esttica, anteponiendo a su nombre la palabra reservada static. Una variable esttica existe slo en el mbito local de la funcin, pero no pierde su valor cuando la ejecucin del programa abandona este mbito. 5.1.5. Devolucin de valores Falta 5.1.6. Funciones con nmero variable de parmetros

PHP nos permite definir funciones en las que el nmero de parmetros no est fijado a priori, es decir, en PHP se permite que una funcin reciba como parmetro una lista de valores de longitud variable. No se necesita de una sintaxis especfica, pero su funcionamiento se basa en el siguiente conjunto de funciones definidas en PHP: fun_num_args ( ): Devuelve el nmero de argumentos pasados a la funcin. fun_get_args ( ): Devuelve un array con los argumentos pasados a la funcin fun_get_args ( ): Devuelve un elemento de la lista de argumentos pasados a la funcin. Los argumentos comienzan en la posicin 0, al igual que los arrays. Si se solicita un argumento de una posicin que no existe devuelve false. Ejemplo: <HTML> <HEAD> <TITLE>Trabajando con Funciones</TITLE> </HEAD> <BODY> <CENTER> <H2>Funciones de Usuario<I></I></H2> <?php function elMayor($dato1,$dato2){ $num_args = func_num_args(); $args = func_get_args(); $elmayor=($dato1>$dato2)?$dato1:$dato2; for($i=2;$i<$num_args;$i++) $elmayor=($elmayor>$args[$i])?$elmayor:func_get_arg($i); return $elmayor; } ?> <TABLE BORDER="0" CELLPADDING="4" CELLSPACING="6"> <TR ALIGN="center"> <TD BGCOLOR="#FFFBAD"> <?php echo "El mayor de 17, 5, 22 y 19 es <BR><H2>".elMayor(17,5,22,19)."</H2>"; ?> </TD>

</TR> </TABLE> </CENTER> </BODY> </HTML> 6.1.7 Funciones variables Son una herramienta muy til de PHP que permite implementar, entre otras cosas. Retrollamadas (callbacks) y tablas de llamadas. Su funcionamiento es el siguiente: si una variable tiene unos parntesis aadidos al final, PHP buscar una funcin con el mismo nombre que el contenido de la variable e intentara ejecutarla. <HTML> <HEAD> <TITLE>Trabajando con Funciones</TITLE> </HEAD> <BODY> <CENTER> <H2>Funciones de Usuario<I></I></H2> <?php $array_func=array("aEuros","aDolares","aYens"); $precios=array(1000,2300,7000); function aEuros($dato){ return sprintf("%02.2f",$dato/166.386); } function aDolares($dato){ return sprintf("%02.2f",$dato/195.6); } function aYens($dato){ return sprintf("%02.2f",$dato/206.36); } ?> <TABLE BORDER="1" CELLPADDING="2" CELLSPACING="2"> <TR ALIGN="center" BGCOLOR="YELLOW"> <TD>Pesetas</TD><TD>Euros</TD><TD>Dlares</TD><TD>Yens</TD>

</TR> <?php for($i=0;$i<sizeof($precios);$i++){ echo "<TR ALIGN='center'>"; echo "<TD>$precios[$i]</TD>"; for($j=0;$j<sizeof($array_func);$j++){ $funcion=$array_func[$j]; echo "<TD>".$funcion($precios[$i])."</TD>"; } echo "</TR>"; } ?> </TABLE> </CENTER> </BODY> </HTML> 6.1.8 Funciones recursivas Se dice que una funcin es recursiva cuando en algn punto de su cuerpo se llama a s misma. Hay que tener cuidado al escribir una funcin recursiva, ya que puede ocurrir que se llame a s misma indefinidamente. Por tanto, es esencial asegurarse de implementar una forma adecuada de terminar la recursin: es lo que se denomina como condicin de parada. La recursin nos vale para solucionar algunos problemas complejos; una ejemplo tpico de recursin es hallar el factorial de un nmero. El siguiente ejemplo nos muestra cmo implementarlo en PHP.

<HTML> <HEAD> <TITLE>Trabajando con Funciones</TITLE> </HEAD> <BODY> <CENTER> <H2>Funciones de Usuario<I></I></H2> <?php function factorial($numero){ if ($numero==0) return 1; return $numero * factorial($numero-1); } function factorial2($numero){

echo "$numero! = "; for($factorial=1;$numero>1;$numero--){ $factorial*=$numero; echo "$numero x "; } echo "1 = $factorial"; return $factorial; } ?> <TABLE BORDER="1" CELLPADDING="2" CELLSPACING="2"> <TR ALIGN="center" BGCOLOR="YELLOW"> <TD>F. Recursiva</TD> <TD>Funcin No Recursiva</TD> </TR> <TR ALIGN="center"> <TD><?php echo factorial(2); ?></TD> <TD><?php factorial2(2); ?></TD> </TR> <TR ALIGN="center"> <TD><?php echo factorial(3); ?></TD> <TD><?php factorial2(3); ?></TD> </TR> <TR ALIGN="center"> <TD><?php echo factorial(4); ?></TD> <TD><?php factorial2(4); ?></TD> </TR> <TR ALIGN="center"> <TD><?php echo factorial(5); ?></TD> <TD><?php factorial2(5); ?></TD> </TR> </TABLE> </CENTER> </BODY> </HTML> 6.2 TRABAJANDO CON CLASES Y OBJETOS Los conceptos de clase y objeto, entre otros muchos, estn ligados a la Programacin Orientada a Objetos (POO) y, aunque este tipo de programacin no es un objetivo que pretenda cubrir este curso, como PHP permite la definicin de clases y objetos, en los siguientes apartados se mostrar una introduccin a la (POO) y se indicar el modo en que PHP nos permite definir clases y objetos. 6.2.1 INTRODUCCION La orientacin a Objetos (a partir de ahora, OO) ofrece un conjunto de disciplinas de modelizacin y desarrollo de software que permiten hacer frente de forma sencilla la construccin de sistemas de complejidad creciente.

Un objeto ser un concepto o una vista abstracta de una cantidad, con significado relevante dentro del sistema y limites bien definidos. La abstraccin nos permite abordar la complejidad del sistema capturando sus aspectos esenciales y omitiendo los detalles, de forma que sea posible comprenderlo antes de construirlo. En un objeto se unifican dos aspectos: estructura y comportamiento. La idea fundamental de la POO es la de encapsular en una misma entidad una serie de datos que definan sus caractersticas esenciales, a las que llamamos propiedades y las funciones encargadas de acceder a estos datos, denominados mtodos. Por medio de la encapsulacin, es posible diferenciar los aspectos externos de un objeto que sern accesibles para el resto de los objetos, de aquellos detalles internos que quedarn ocultos para los dems. Solo se podr acceder a las propiedades de un objeto a travs de sus mtodos: as, desde el exterior, un objeto slo se conocer por su comportamiento. Esto nos permite independencia entre los servicios que ofrece un objeto y la forma de operar para generar dicha funcionalidad: el aspecto interno o implementacin de las operaciones de un objeto podran cambiar, sin que esto perjudicase a las aplicaciones que los utilizan, siempre, claro est que se mantenga su aspecto externos o interfaz. Una clase describe las caractersticas de un conjunto de objetos similares. Los objetos de una clase comparten un propsito semntico comn, tendrn los mismo atributos, los mismos patrones de comportamiento y se relacionarn de la misma forma con el resto de los objetos. Todo objeto es la instancia, es decir, esta definido a partir de una clase. La clase de un objeto es una propiedad implcita de si mismo, cada objeto conoce su clase. Una clase no almacena objetos, solamente define la estructura y el comportamiento de sus instancias, esta herencia es el concepto sobre el que se asientan la reutilizacin y la extensibilidad del software. Permite construir una clase nueva, partiendo de otra ya existente, de forma que se permite construir una clase nueva, partiendo de otra ya existente, de forma que se compartan o hereden tanto su estructura de datos, como su comportamiento y se aaden, si es necesario, propiedades exclusivas establecindose as una relacin jerrquica entre las clases de objetos. La introduccin de las clases permiten continuar con la abstraccin del problema otorgando capacidad para generalizar, de forma que, partiendo de unos pocos casos especficos, se llega a un gran nmero de casos similares. La clase proporciona los mecanismos de abstraccin, encapsulacin y ocultamiento de la informacin, adems de ser un componente fundamental en la reutilizacin. 6.2.2 Ventajas de la OO frente al as metodologas tradicionales de desarrollo de software, en la que se hace hincapi en especificar y descomponer la funcionalidad del sistema, el enfoque orientado a

objetos se centra en la identificacin de objetos procedentes del dominio de la aplicacin y en especificar que es un objeto, permite alcanzar un resultado consiste, mas general, ms robusto y menos propenso a errores de lo que seria si nos centrsemos nicamente en el usos de los datos y las operaciones. El proceso de desarrollo pasar por modelar la semntica del problema en trminos de objetos diferentes pero relacionados, para reexaminar posteriormente la clases del dominio del problema, refinndolas, extendindolas, reorganizndolas y aadiendo, si es necesario, nuevas clases del dominio de la solucin como clases de interfaz, y aplicacin y clases de base, para pasar finalmente a la implementacin de la clases identificadas. Podemos resumir las ventajas de un enfoque OO frente a una metodologa de desarrollo tradicional en los siguientes puntos: Modelar el mundo real de la forma ms cercana posible a la perspectiva del usuario final; la esencia del desarrollo orientado a objetos es la identificacin y organizacin de conceptos del dominio de la aplicacin y no su representacin final en un lenguaje de programacin. Interactuar con el entorno computacional de forma fcil. Modificar y extender las implementaciones de componentes de una forma sencilla. Impulsar la reutilizacin de cualquier elemento derivado del a produccin del software, desde una especificacin de requisitos a una librera de funciones, de forma que es posible abordar el desarrollo de una nueva aplicacin de software sin partir de cero. 6.2.3 Definicin de una clase. La sintaxis para la declaracin de clases en PHP es similar a la utilizacin en otros lenguajes como C++ o Java. Se utiliza la palabra reservada class, seguida del nombre de la clase: Class NombreClase { var $variables; funcin mtodos ( $parmetros) { cdigo del mtodo } }

Las clases en PHP estn compuestas por variables de clase (variables definidas utilizando la palabra reservada var) y por funciones, denominadas mtodos, con las que realizamos las funcionalidades asociadas a las clases (los mtodos pueden recibir o no parmetros que hay que especificar en la definicin de la clase y en la creacin de los objetos). A veces, dentro de la clase, aparece definido un mtodo cuyo nombre coincide con el de la clase; a ese mtodo se le denomina constructor y ser invocado automticamente cuando se instancie un nuevo objeto de la clase. Habitualmente, los constructores son los encargados de inicializar las variables definidas en la clase. Para acceder a la variables y mtodos de un objeto utilizaremos el operador ->, sobre el nombre de la variable que almacena el objeto si accedemos desde fuera de la clase del objeto: $objeto->nombre_de_variable $objeto->nombre_de_mtodo (parmetros) Si referenciamos al propio objeto dentro de la clase, lo haremos haciendo uso de la variable especial $this, que hace referencia al objeto que esta siendo definido/manejando en la declaracin: $this-nombre_de_variable $this->de_mtodo(parmetros) Nota: Una de la carencias que presentan las clases en PHP es la no posibilidad de restringir el acceso a las variables y mtodos.

6.2.4 Creacin de un objeto para crear un objeto utilizaremos el operador new y el nombre de la clase de la siguiente forma: $nuevo_objeto = new nombre_clase; a esta operacin en terminologa de OO se le denomina instanciacin de un objeto a partir de una clase, si tenemos definido un constructor con parmetros al instanciar el objeto, tambin debemos pasarle esos parmetros: $nuevo_objeto=new nombre_clase ($parmetro [, $parmetro]) El siguiente ejemplo muestra la definicin de una clase y de dos objetos instancias de dicha clase: <HTML> <HEAD>

<TITLE>Trabajando con Clases y Objetos</TITLE> </HEAD> <STYLE TYPE="text/css"> TD{ text-align:center; font-family:"Verdana","Courier New"; font-size:12px; } TD.titulo{ font-size:20px; font-weight:bold; color:orange; } </STYLE> <BODY> <CENTER> <H2>Clases y Objetos<I></I></H2> <?php class barra{ var $color; var $alto; var $ancho; var $nombre; function barra($nombre,$color,$alto,$ancho=50){ $this->nombre=$nombre; $this->color=$color; $this->alto=$alto; $this->ancho=$ancho; } } // fin de la clase barra

class graficaBarras{ var $elementos; var $titulo; function graficaBarras(){ $this->elementos=array(); $this->titulo=""; } function fijarValor($nombre,$color,$alto,$ancho=50){ $barra = new barra($nombre,$color,$alto,$ancho); $this->elementos[]=$barra; } function fijarTitulo($titulo){ $this->titulo=$titulo; }

function dibuja(){ if(count($this->elementos)==0) return 0; echo "<TABLE BORDER='0'>\n"; if($this->titulo){ echo "<TR><TD CLASS='titulo'>$this->titulo</TD></TR>"; echo "<TR><TD></TD></TR>\n"; } echo "<TR><TD>"; echo "<DIV>\n"; for($i=0;$i<count($this->elementos);$i++){ echo "<SPAN STYLE='"; echo "width:".$this->elementos[$i]->ancho."; "; echo "height:".$this->elementos[$i]->alto."; "; echo "background-color:".$this->elementos[$i]->color.";"; echo "'>".$this->elementos[$i]->alto."</SPAN>\n"; } echo "</DIV></TD></TR>\n"; echo "<TR><TD><HR></TD></TR>\n"; echo "<TR><TD CLASS='pie'>"; echo "<DIV>\n"; for($i=0;$i<count($this->elementos);$i++){ echo "<SPAN STYLE='"; echo "width:".$this->elementos[$i]->ancho.";'>"; echo $this->elementos[$i]->nombre."</SPAN>\n"; } echo "</DIV></TD></TR>\n";

echo "</TABLE><BR>\n"; } } // fin de la clase graficaBarras $migrafica1=new graficaBarras; $migrafica1->fijarValor("dato1","red","100"); $migrafica1->fijarValor("dato2","green","150"); $migrafica1->fijarValor("dato3","blue","80"); $migrafica1->fijarValor("dato4","silver","130"); $migrafica1->fijarTitulo("Grfica 1"); $migrafica1->dibuja(); $migrafica2=new graficaBarras; $migrafica2->fijarValor("a","red","80","30"); $migrafica2->fijarValor("b","green","50","30"); $migrafica2->fijarValor("c","blue","35","30"); $migrafica2->fijarValor("d","silver","30","30"); $migrafica2->fijarValor("e","yellow","70","30"); $migrafica2->fijarTitulo("Grfica 2"); $migrafica2->dibuja(); ?> </CENTER> </BODY> </HTML>