Lo primero que vamos a hacer es crear una p�gina PHP que nos informe de las caracter�sticas del interprete de PHP que tenemos instalado en nuestro servidor de web. Para ello debemos de crear una p�gina PHP con el contenido siguiente:
<? phpInfo(); ?>
Este debe de ser el contenido de un fichero de nombre "info.php" y que debe de estar en alg�n lugar accesible por el servidor de web. Quiz�s lo mejor sea que lo guardes dentro de t� directorio personal web: "/home/tu_login/public_html". Por ejemplo yo lo tengo dentro del directorio "/home/acs/public_html/info.php". Una vez que lo tengas guardado vamos a intentar abrir esta p�gina. Para ello apunta t� navegador a la p�gina: "http://localhost/~tu_login/info.php". En mi caso dicha p�gina es: "http://localhost/~acs/info.php". El resultado que debes de obtener debe de ser algo similar al de la siguiente figura n�mero 1.

Al pedirle esta p�gina al servidor de web, este al ver su extensi�n llama al interprete de PHP y le dice que "ejecute" la p�gina y le entregue los resultados. El interprete abre la p�gina y ejecuta la llamada a la funci�n "phpInfo()" que, como resultado, nos entrega toda la informaci�n sobre el interprete de PHP en formato HTML. �Verdad que es sencillo?.
Vamos con una p�gina algo m�s complicada. Y vamos con la orientaci�n a objetos. PHP tiene soporte para la programaci�n orientada a objetos, es decir, puedes crear clases para la construcci�n de objetos, con sus constructores etc. El soporte de objetos que tenemos en PHP no es tan potente como el de C++, pero cada vez es m�s completo y en esta versi�n nueva de PHP4 este soporte ha sido mejorado.
Si no sabes programar utilizando objetos en este curso algo vas a aprender pero te recomiendo que sin m�s dilaci�n consigas alg�n buen libro o tutorial por Internet. Los objetos cada vez tienen m�s fuerza a la hora de desarrollar software. De cualquier forma en este curso vamos a utilizar la programaci�n con objetos en un nivel muy b�sico.
En nuestro siguiente ejemplo vamos a crear un objeto que nos va a permitir acceder a diversas bases de datos. Claro est� que lo vamos a dejar sin implementar a�n en gran parte, pero todo llegar�. Aqu� va el c�digo de la p�gina:
<?php class connection { var $dbug=1, $con, $type; function getType() {global $type;return $this->type;} // Constructor del objeto de conexi�n a la base de datos function connection($typedb="MySQL",$database_name="template1") { $this->connection_open ($typedb,$database_name); } // Apertura de la conexi�n con la base de datos function connection_open ($typedb,$database_name) { $this->$type=$typedb; if ($type=="PostgreSQL") $this->$con=new postgresql_connection; elseif ($type=="MySQL") $this->$con=new mysql_connection; else {error_message("Open:Unkown database type");exit;} $this->$con->connection_open($database_name); } } class mysql_connection { function mysql_connection() { echo "<h1>La clase mysql_connection a�n no est� implementada.<h1>"; } function connection_open($database_name) { echo "<h1>M�todo connection_open sin implementar.<h1>"; } } $bd = new connection("MySQL","template1"); ?>
Si el lector est� acostumbrado a la programaci�n con objetos este c�digo le resultar� muy familiar. Tenemos una clase principal "connection" que se encarga de gestionar las conexiones con la base de datos. Cuando desde nuestro programa queramos acceder a una base de datos, nos creamos un objeto connection pas�ndole como par�metros al constructor de connection, m�todo que se llama de forma autom�tica al crear el objeto, el tipo de base de datos al que queremos acceder y el nombre de la base de datos concreta con la que queremos trabajar.
Este objeto delega en los objetos espec�ficos de cada base de datos, el del gestor de base de datos MySQL es "mysql_connection", la apertura de una conexi�n, las peticiones SQL etc. Esta t�cnica de utilizar objetos que delegan el trabajo final en otros es muy utilizada en lenguajes que carecen de herencia, mecanismo por el que una clase hereda toda la informaci�n de estado y m�todos de la clase de a que hereda. PHP3 en sus primeras versiones no ten�a soporte para herencia por lo que me vi obligado a utilizar esta t�cnica. En la actualidad PHP ya soporta herencia, aunque no m�ltiple. Y no, todas las reglas de encapsulaci�n p�blica y privada no est�n implementadas. Y hay que tener cuidado con algo que nos puede dar muchos quebraderos de cabeza: al crear un objeto de una clase B que hereda de una clase A, se llama de forma autom�tica al constructor de la clase B pero no al de su padre, la clase A.
Sobre la sintaxis de PHP, es muy similar a la de C o C++. Quiz�s lo m�s destacado ocurre a nivel sem�ntico: el tipado es muy poco estricto, algo t�pico en los lenguajes "script", y cuando creamos una variable en ella podemos meter el tipo de datos que queramos. Esto es muy flexible y c�modo para el desarrollador, aunque los errores que se cometen pueden ser mucho m�s graves y dif�ciles de corregir. Las posibilidades del interprete para detectar incompatibilidades entre variables se reducen mucho y puede ocurrir cosas extra�as en determinadas circunstancias si no tenemos cuidado.
Sobre el c�digo de este ejemplo en concreto, tenemos dos clases. La definici�n de una clase es hace con la palabra clave "class" seguida del nombre de la clase. Entre llaves desarrollamos toda la descripci�n de la clase, sus variables y m�todos. Dentro de un m�todo de la clase (function) se pueden acceder otras partes de la clase por medio del puntero "$this". Por ejemplo, para acceder desde el m�todo "connection_open" a la variable de la clase "$type" lo hacemos con "$this->$type".
Si guardamos esta clase en un fichero, por ejemplo "ejemploDB.php", cuando accedamos a este fichero a trav�s del servidor de web, este llamar� de nuevo al interprete de PHP al ver que la extensi�n del fichero es "php". El interprete de PHP analizar� el c�digo y ejecutar� la instrucci�n ":
$bd = new connection("MySQL","template1");
Con ello se crear�a un nuevo objeto de la clase "connection". Al crearse se llama de forma autom�tica al constructor "function connection" que a su vez llama al m�todo "connection_open". Este m�todo crea un nuevo objeto de la clase "mysql_connection" ($con) el cual llama de forma autom�tica a su constructor "function mysql_connection" el cual env�a la cadena HTML "<h1>La clase mysql_connection a�n no est� implementada.<h1>". Desde el m�todo "connection_open" de "connection" se llama a "connection_open" del objeto "$con", que es de la clase mysql_connection, lo que provoca que se imprima otra cadena HTML: "<h1>M�todo connection_open sin implementar.<h1>.". Tras esta �ltima invocaci�n el programa finaliza y se env�a el resultado al servidor de web, el cual reenv�a estos datos al cliente. En la figura 2 podemos ver el resultado de dicha ejecuci�n.

�M�s caracter�sticas de PHP
Ahora que hemos visto lo sencilo que es desarrollar con PHP vamos a ver que cosas podemos hacer con �l, las librer�as de las que disponemos. Muchas de estas librer�as ya est�n orientadas a objetos por lo que su uso ser� similar al de este ejemplo. Este ejemplo es el que utilizaremos durante el curso para ir introduciendo m�s conceptos de PHP y en particular, para presentar como se trabaja con las bases de datos MySQL y PostgreSQL.
PHP en cada nueva versi�n soporta nuevas funcionalidades por lo que el mejor m�todo para ver que nuevas librer�as incluye es cuando compilamos. Si dentro del directorio con las fuentes de PHP ejecutamos el comando "configure --help" nos dar� informaci�n de todas las posibles opciones que tiene PHP al ser compilado y, entre esta informaci�n, la de todos los m�dulos que podemos a�adir a PHP si disponemos de las librer�as adecuadas. Dentro del manual de PHP disponemos tambi�n de una referencia a todas las funciones disponibles. Ojo que muchas veces es necesario compilar PHP de forma especial para incluir soporte para una determinada funcionalidad. Por ejemplo, si queremos acceder desde PHP al gestor de base de datos MySQL, es necesario que a la hora de compilar PHP incluyamos ests soporte. Para ello es necesario tener las librer�as de MySQL instaladas en el sistema, normalmente en el paquete "dev" de MySQL, y ejecutar "./configure --with-mysql" antes de compilar PHP. De esta forma PHP incluir� en el m�dulo generado dicho soporte. En la informaci�n que obtenemos con la llamada a la funci�n "phpInfo()" se incluye informaci�n sobre los m�dulos incluidos. En la figura 3 se puede observar la informaci�n referente al m�dulo MySQL y al GD, que se utiliza para la creaci�n de gr�ficos "al vuelo".

De esta informaci�n es importante a versi�n de API del cliente. Si esta no es compatible con la del servidor que queramos acceder, no podremos acceder a este servidor. En este caso tenemos la versi�n 3.22 que utiliza el protocolo 10 para comunicarse con el servidor MySQL. Si tuvieramos una versi�n 3.20 del cliente (la versi�n de MySQL que se liber� con licencia GPL) no podr�amos acceder a los servidores 3.22 ya que el cliente utilizar�a el protocolo de comunicaciones versi�n 9, incompatible con la versi�n 10.
Siempre que se habla de PHP lo primero que se hace es presentar el gran n�mero de gestores de bases de datos a los que puede acceder.
- Adabas D
- dbm
- dBase
- filePro
- Hyperwave
- Informix
- InterBase
- LDAP
- Microsoft SQL server
- mSQL
- MySQL
- ODBC
- Oracle
- PostgreSQL
- Solid
- Sybase
Pero si este aspecto resulta impresionante no menos el soporte para:
- Acceso a servidores IMAP
- Env�o de correo con SMTP
- Acceso a servidores de FTP
- Acceso a SNMP para gesti�n de redes y equipos
- Generaci�n din�mica de gr�ficos y documentos PDF
- An�lisis de documentos XML
- Corrector de ortograf�ai
- Genraci�n de datos en WDDX (Intercambio Web de Datos Distribuidos)
Y todo esto ha sido posible gracias a que PHP ha sido dise�ado de forma muy modular y ha sido sencillo seg�n han sido surgiendo librer�as, utilizarlas desde PHP. Toda esta funcionalidad est� basada en librer�as que en su mayor parte no han sido desarrolladas por el equipo de PHP. La gente de PHP lo que ha implementado han sido os cabos necesarios para poder acceder a las librer�as.
A lo largo del curso iremos presentando el uso de algunas de estas librer�as, aunque nada detiene al lector de comenzar este aprendizaje. En el manual de PHP dispone de documentaci�n abundante sobre todas estas funciones, su uso y los posibles resultados. Esta entrega la vamos a finalizar con una descripci�n de las nuevas caracter�sticas de PHP4, versi�n que utilizaremos a lo largo de todo el curso.
�El nuevo PHP4

La principal novedad de PHP4 es en el interprete del lenguaje PHP. Gracias a Zend, desarrollado por Andi Gutmans y Zeev Suraski, se han logrado aumentos de entre 5 y 10 veces en la velocidad de ejecuci�n de p�ginas PHP. Este nuevo rendimiento le ha puesto por delante de ASP, la tencolog�a de Microsoft, por lo que le va a permitir competir directamente con ASP en la plataforma de Microsoft. La plataforma de desarrollo Apache+PHP en entornos Microsoft est� logrando ya rendimientos superiores a IIS+ASP, por lo que el aumento de su uso en estas plataformas parece muy probable. Esto significar� que en el futuro el desarrollador en plataformas NT, por ejemplo, no se ver� obligado al uso de IIS+ASP para el desarrollo de sistemas web, tal y como hab�a sucedido hasta ahora. Por otro lado, PHP estaba hasta el momento pensado b�sicamente para Apache. Era el �nico que ten�a soporte para tener a PHP como un m�dulo del servidor. Todos los dem�s servidores de web s�lo pod�an utilizar a PHP como cgi. En PHP4 se han a�adido al soporte de la API de Apache, el de Netscape (NSAPI), el soporte para ISAPI ( API de Internet Explorer) y para la API del servidor de AOL. De esta forma todos estos servidores podr�n lograr rendimientos similares a Apache en su ejecuci�n de PHP.
Adem�s del aumento en rendimiento en lo referente al soporte de objetos en PHP, la sobrecarga de objetos se ha mejorado. De esta forma se ha a�adido la posibilidad de m�todos polim�rficos, m�todos que seg�n desde que referencia a un objeto se llamen se comportan de una forma o de otra. Esta caracter�stica es muy importante para incluir soporte para acceder a las arquitecturas CORBA y COM.
Otra nueva caracter�stica de PHP4 es que se puede compilar para soportar hebras, algo que no era posible en PHP3. La principal ventaja que podemos obtener de esta funcionalidad es el uso de librer�as que utilicen hebras. Y en la mayor�a de las implementaciones de CORBA esto es as�. Quiz�s pase ya poco tiempo antes de poder acceder al mundo CORBA desde PHP.
Para el desarrollador con PHP4 se incluye un depurador lo que nos evitar� muchos quebraderos de cabeza con PHP. Podremos seguir con mayor profundidad esos errores misteriosos que ocurren en estos lenguajes poco tipados. El nuevo interprete de PHP es capaz de liberar los recursos que reservemos de forma autom�tica con lo que nos podremos olvidar de liberarlos. S�, esto es algo similar al recolector de basura de Java. Habr� que hacer pruebas para ver que tal funciona porque en el caso de Java, muchas veces da m�s dolores de cabeza de los que te ahorra. En la referencia [2] se puede acceder a un informe realizado por Javier Carretero sobre PHP4, el m�s completo que he encontrado en Internet.
�Conclusiones
Esperamos que con esta primera entrega del curso de PHP el lector haya recibido la motivaci�n suficiente como para empezar a utilizarlo. Si algo caracteriza a PHP es su sencillez: en pocos d�as se puede llegar a ser un desarrollador de PHP bastante profesional.
En las pr�ximas entregas del curso se ir�n presentando las librer�as principales de PHP, las virguer�as que se pueden acceder con muy poco c�digo y las noticias que aparezcan dentro del mundo de PHP.
�Referencias
- [1] http://www.php.net: P�gina principal de PHP
- [2] Informe de PHP4 de Javier Carretero