You are on page 1of 48

CURSO PHP

PHP es lo que llamamos un lenguaje de programacion del lado del servidor, esto significa que el cdigo se interpreta en el servidor y no en el ordenador del usuario. El cdigo php interpretado, produce un resultado que es enviado al navegador del visitante en forma de HTML, imagen, documento .doc... de ninguna manera el navegador del visitante accede al cdigo fuente en php sino solo a su resultado en HTML.

El navegador pide un documento al servidor, en el caso que este documento sea un archivo PHP, el archivo es interpretado y se enva su resultado al navegador. Vamos a ver un ejemplo sencillo de cdigo escrito en php para que nos sea mas fcil de comprender:
000 001 002 003 004 005 006 007 008 009 010 011 <html> <head> <title>Prueba</title> </head> <body> <? $texto = "Hola mundo"; echo $texto; ?> </body> </html>

Este cdigo producir el siguiente resultado que es lo que se enviar al navegador del

visitante:
000 <html> 001 <head> 002 <title>Prueba</title> 003 </head> 004 <body> 005 Hola mundo 006 </body> 007 </html>

Vemos que el cdigo php esta delimitado por las etiquetas <? y ?>, aunque tambien puede usarse <?php en lugar de <?. Otra caracterstica del php es que las variables se identifican con el signo del dolar ($) y que cada instruccion debe finalizarse con un punto y coma (;).

Instalar fcilmente Apache y PHP


Para poder empezar a aprender a programar en PHP, debemos tener un servidor web con PHP instalado, y lo ms cmodo para trabajar es que lo tengamos en nuestro propio ordenador. Las herramientas que necesitamos, son un servidor web ( en el curso se utiliza Apache pero el IIS de Windows tambin puede servir ), el propio PHP y posiblemente el motor de bases de datos MySQL. Todo esto se puede instalar por separado, o se puede hacer con paquetes que instalan y configuran PHP, Apache y MySQL. Aunque en este captulo ensear a instalar el XAMPP, existen otros como el WAMP ( ver Instalacin de Wamp en windows ) o el easyPHP.

El XAMPP
El XAMPP es el nico paquete de los que hemos comentado en este captulo disponible para multiplataforma (Windows, Mac OS X, GNU/Linux y Solaris). Incluye, entre otros, aplicaciones como el Apache, el MySQL, el intrprete PHP, el OpenSSL, el phpMyAdmin, el Mercury Mail Transport System y el FileZilla FTP Server. El primer que hacemos es descargarnos el instalador. Os explicar la instalacin para WINDOWS, pero los paquetes de instalacin de otros SO los encontramos en la misma pgina. Nos damos cuenta de que la versin para WINDOWS supera los 30 MB, as que tened paciencia los que no dispongan de conexin rpida a Internet o bajaos el WAMP Server o el EasyPHP (al final del artculo).

Una vez bajado el ejecutable, lo abrimos y vemos que nos pregunta por el idioma en que queremos realizar la instalacin (hay 11, uno de ellos el espaol). Despus de esto, nos dan la bienvenida al asistente de instalacin i, al presionar sobre Siguiente, nos preguntan el directorio sobre el cual queremos realizar la instalacin.

El asistente nos da la bienvenida.

Especificamos el directorio de instalacin.

Si la instalacin se produce sin problemas, presionamos sobre Acabar y el XAMPP ya estar listo.

Proceso de instalacin.

La instalacin se ha finalizado.

Si lo ejecutas, podrs visualizar el XAMPP Control Panel Application, donde podrs poner en funcionamiento el Apache, el MySQL, el FileZilla y el Mercury.

XAMPP Control Panel.

Tan solo por tener activado el Apache, puedes acceder al http://localhost, donde podrs ver si se ha instalado correctamente el servidor local.

Localhost por defecto de XAMPP.

Aunque lo puedes eliminar, el localhost por defecto de XAMPP puede ser muy til: des de all puedes acceder a todas las herramientas, y adems puedes ver cul es el estado de este y sus agujeros de seguridad.

Otros paquetes.
Adems del XAMPP, hay otros paquetes de instalacin del servidor local. No os quedis tan solo con esto, probar ne tantos como podis. Aqu os dejo dos: EasyPHP EasyPHP contiene el mnimo para poder trabajar bien: un servidor web (Apache), el intrprete PHP y el MySQL. La ltima versin est disponible en espaol (y en 27 lenguas ms) y tan solo ocupa 7 MB la aplicacin y 144 KB todo el conjunto de idiomas. An as, la ltima versin es muy antiguas y les versiones del Apache y el PHP estn muy desfasadas (Apache 1.x y PHP4), para el que si te quieres introducir en programacin orientada a objectos te recomiendo seguir leyendo. Web para descargartelo: http://www.easyphp.org/telechargements.php3 WAMP Server WAMP es el acrnimo de Windows Apache MySQL PHP. Es bastante ms completo, ya que incorpora el PHP5, el Apache 2 y el MySQL 5. No dispone de ms idiomas que no sean el ingls o el francs y ocupa unos 17 MB. Web para descargartelo: http://www.wampserver.com/en/download.php

Si os descargis uno de los dos ltimos y queris trabajar con GD Images, tendris de desbloquear la librera al archivo de configuracin de PHP (php.ini a la carpeta conf_files de EasyPHP y a la carpeta Apache2/bin del WAMP). Buscad la lnea ;extension=php_gd2.dll i sacadle el punto y coma. Quedar as: extension=php_gd2.dll Tambin tenis la opcin de bajaros el Apache, el intrprete de PHP y todas les utilidades por separado y incorporarlas como se explica en estos dos artculos: Instalacin de Apache2 en Windows y Instalar PHP en Windows

Comentarios
Para que en futuras revisiones a tu cdigo por tu parte y sobretodo por parte de otros programadores este cdigo sea inteligible para la mente humana, es un buen costumbre comentar lo que se esta haciendo en PHP pero en palabras. De esta manera el cdigo ser mucho mas sencillo de comprender y a su vez de modificar, corregir, ampliar... Los comentarios que soporta PHP sn los de C, C++ y los del shell de Unix, asi podemos usar // y /* */ para comentarios y comentarios multilinea respectivamente como haramos en C:
000 001 002 003 004 005 006 <? echo 'Esto se ve'; // esto no se ve echo 'esto tambien se ve'; /* esto tampoco se ve */ ?>

O tambien podemos usar # como en los comentarios del shell de Unix:


000 001 002 003 <? # esto no se ve echo 'pero esto si'; ?>

Tendremos cuidado con no poner un comentario multilnea en el interior del otro:


000 <? 001 /* /* No hacer nunca esto */ */ 002 ?>

Como veis, PHP interpreta como comentario desde el primer /* al primer */ sin tener en cuenta que hay otro */, esto nos producir un error asi que habr que tener cuidado.

Variables
Una variable es un nombre que contiene unos determinados datos, ya sean de texto o numricos, y en php tienen la peculiaridad de ir precedidas por el signo del dolar ($). En PHP no es necesario declarar las variables antes de usarlas y pueden contener texto y nmeros indiferentemente ( ya hablaremos de esto ms adelante ). Vamos a ver un ejemplo de uso de variables:

000 001 002 003 004 005

<? $miVariable = 'Hola '; $miVariable2 = 33; // Imprimimos Hola 33 echo $miVariable.$miVariable2; ?>

Como vemos, asignamos valor a una variable con el operador de igualdad (=), y concatenamos con el operador punto (.). Existe la posibilidad de trabajar con una variable de nombre variable, es decir, podemos acceder a una variable que tenga el nombre que nos viene indicado por el contenido de otra variable, usando ($$):
000 001 002 003 004 005 <? $nombreVariable = "miVariable"; $$nombreVariable = "Hola"; // Imprimimos Hola echo $miVariable; ?>

Para que una variable sea accesible desde cualquier parte de nuestro script php, la definiremos cmo global de la siguiente manera:
000 <? 001 global $miVariableGlobal = 'Hola'; 002 ?>

Hay un seguido de variables que ya vienen definidas en nuestros scripts en php por defecto, estas son las variables predefinidas.

Variables predefinidas
El PHP tiene muchas variables predefinidas, pero hay que tener en cuenta que todas estas variables no suelen estar activas en todos los servidores, para saber de que variables disponemos, podemos usar la funcin de info de PHP:
000 <? 001 phpinfo(); 002 ?>

Estas sn las variables que usaremos ms comunmente y que probablemente nuestro servidor tendra correctamente habilitadas: 1 $SERVER_NAME Cuando imprimimos a nuestros servido la variable $SERVER_NAME nos devolver normalmente el nombre del server si estamos trabajando en local nos saldria http://localhost/ o el nombre que le hayamos puesto a la maquina y si tenemos la web

alojada por ejemplo en este caso nos saldra www.programacionweb.net 2 $SERVER_SOFTWARE En este caso nos saldria el servidor que andamos usando si usamos el IIS o el apache tal version. 3 $DOCUMENT_ROOT En la variable DOCUMENT_ROOT lo que nos pasaria cuando imprimimos en el navegador nos diria la ruta del fichero exacta , tambien pensando depende de la configuracion del servidor que no dara su ruta, no penseis que nos dar www.nuestraweb.com/nuestroarchivo.php ke este no es caso 4 $HTTP_REFERER Haciendo referers queremos decir que nos dira de donde procede la persona que visita nuestra web, es decir , de donde viene. 5 $HTTP_USER_AGENT Como muy bien dice la siguiente variable es USER_AGENT y que quiere decir esto? Pues que nos dira en que navegador estamos utilizando, Netscape,mozilla,Internet Explorer,etc... 6 $REMOTE_ADDR Esta variable nos puede ser muy util por un motivo muy concreto, Cuantas veces hemos pensado quiero saber la IP del visitante que nos esta visitando? Pues esta misma variable es la que nos ayuda a esto +Informacin en un articulo que publico el webmaster 7 $SERVER_ADMIN Simplemente nos devolver el email de configuracion del servidor donde esta alojado el script PHP. 8 $REQUEST_METHOD Si imprimimos esta variable nos devolvera el tipo de peticin que usamos para acceder a la pagina si fue con POST o con GET 9 $HTTP_ACCEPT Los tipos de archivos que el visitante puede recibir de este servidor con el navegador actual 10 $REMOTE_PORT Como ya habiamos comentado la variable de $REMOTE_ADDR no ibamos a dejar aparte el puerto que se esta utilizando para comunicarse con el servidor web NOTA: No nombr todas las variables predefinidas, todo hay que decirlo esto es un breve resumen hay muchas mas

Constantes

Una constante es como una variable pero con la diferencia que una vez toma un valor este no puede variar durante la ejecucion del script, otra particularidad de las constantes es que son globales, por lo que se pueden leer desde el interior de una funcion sin tener que pasarlas como parametro. Al contrario que las variables, las constantes se expresan sin signo del dolar ($), y se tienen que definir usando la funcion define:
000 001 002 003 <? define ('miConstante','valor de mi constante'); echo miConstante; ?>

Existe otra funcion, llamada defined que nos permite saber si se ha declarado una constante determinada, lo haremos de la siguiente manera:
000 001 002 003 004 <? $definida = defined("miVariable"); // Mostrara 0 si existe la variable y 1 si no existe echo $definida; ?>

En algunos casos no es posible acceder al valor de una constante directamente por su nombre, pues este nombre puede coincidir con el de una funcion y el resultado producido no sera el esperado, en ese caso usaremos la funcion constant para leer el valor de dicha constante:
000 001 002 003 <? define ('echo','valor de mi constante'); echo constant('echo'); ?>

En este ejemplo vemos como la constante tiene un nombre polmico, que coincide con el de una funcion (echo) y para diferenciar el primer echo del segundo hemos usado la funcion constant. Existen muchas constantes predefinidas en PHP, entre las cuales encontramos las llamadas constantes mgicas.

Constantes mgicas
Existen unas constantes llamadas magicas que son accesibles para cualquier script PHP, estas nos proporcionan informacin sobre el script que depende del lugar en el que las usemos: __FILE__ - Contiene el nombre y la ruta del archivo que se est ejecutando __LINE__ - Contiene la lnea que se est ejecutando en ese momento exacto del fichero actual __FUNCTION__ - Aadida en la versin 4.3 de PHP, contiene el nombre de la funcin

que se est ejecutando actualmente __CLASS__ - Aadida tambien en la versin 4.3, contiene el nombre de la clase que se ejecuta actualmente __METHOD__ - Aadida el la versin 5, contiene el nombre del mtodo actual Veamos un ejemplo de uso de estas constantes:[cdigo]<? echo "Ejecutando la lnea ".__LINE__; ?>[/cdigo]Ntese que estas constantes tienen dos barras de subrayado delante y dos detras del nombre cada una.

Tipos de datos en php


PHP es un lenguaje de los denominados de tipo dinmico, lo que significa que una misma variable puede tener tipos ( numero, texto, vector... ) diferentes en distintos momentos. Por esta razn, no soporta la definicin de tipos en la declaracin de variables sino que el tipo de la variable viene determinado por el contexto en el que se encuentra, veamos un ejemplo:
000 001 002 003 004 005 006 007 008 009 <?php // La $var1 // La $var2 // Si $var3 // Si $var3 ?>

variable $var1 es un numero ( entero ) = 3; variable $var2 es un texto ( cadena de caracteres ) = "9 aos"; juntamos las variables $var1 y $var2, obtenemos un texto = $var1 . $var2; // "39 aos" en cambio las sumamos obtendremos un nmero = $var1 + $var2; // 12 ( 3 + 9)
Seleccionar PHP

Maximizar

Podemos forzar un tipo determinado, con la funcin settype o ente parntesis delante de la variable uno de los siguientes tipos de datos:

Tabla de contenido

boolean - Lgico integer - Entero float - Decimal string - Cadena de caracteres null - vaco array - vector object - Objeto

boolean - Lgico
Puede contener 2 valores True o False. Al usarlo cmo entero su valor puede ser 1 ( True ) o 0 ( False ).

Un ejemplo tpico de lgico es el resultado de una comparacin:


000 <?php 001 $var1= 1 != 2 ; // $var1 es true 002 ?>
Maximizar Seleccionar PHP

integer - Entero
Puede contener enteros ( sin decimales ) positivos y negativos, se pueden escribir en notacin octal, decimal y hexadcimal:
000 001 002 003 004 <?php $var1 = 027; // Notacin octal ( 23 en decimal ) $var1 = 23; // Notacin decimal $var1 = 0x17; // Notacin hexadecimal ( 23 en decimal ) ?>
Maximizar Seleccionar PHP

Si lo utilizamos cmo lgico su valor es False si es 0 o True en cualquier otro caso.

float - Decimal
En versiones anteriores a la 4.2.0 de PHP se les llamaba double, contienen nmeros decimales positivos o negativos. Si lo usamos cmo entero, su valor se redondea a la baja ( truncamiento ).

string - Cadena de caracteres


Es una lista de caracteres ( letras, cifras, signos... ) en un orden determinado, por ejemplo "hola mundo". Los representamos delimitados con comillas dobles o simples. No podemos utilizar el mismo tipo de comillas en el interior de una cadena que para delimitarla, en este caso le tendremos que poner un \ delante para diferenciarla del final de la cadena, y si se puede confundir, \\ en lugar de \:
000 001 002 003 004 005 006 007 <?php // As si $var1 = "pongo \ delante de las \" pero no de las ' "; $var1 = 'pongo \ delante de las \' pero no de las " '; $var1 = "pongo \\"; // As no $var1 = "pongo " donde quiero"; // Mal ! " $var1 = "pongo \"; // Mal ! \ ?>
Maximizar Seleccionar PHP

Las cadenas con comillas dobles, a parte de \" y \' tienen otros caracteres especiales:

\n - Salto de lnea (en el cdigo, no en la presentacin de la pg.) \r - Retorno de carro (Enter) \t - Tabulador \$ - Dlar La existencia de un carcter especial \$ para el dlar, es porque en el interior de comillas dobles podemos usar variables. Si vamos a acceder a elementos de un vector, lo agruparemos con { y } detrs del $:
000 001 002 003 004 005 006 007 <?php // As si $var1 = "php"; $var2 = Array ( "php","html" ); // [0]=>php, [1]=>html $var3 = "aprendo $var1"; // aprendo php $var3 = "aprendo {$var2[0]}"; // aprendo php // As no $var3 = "aprendo $var2[0]"; // aprendo Array ?>
Maximizar Seleccionar PHP

Si mezclamos una cadena con nmeros ( enteros o decimales ) se utilizar cmo nmero hasta el primer carcter incorrecto ( ver primer ejemplo del captulo ). Si lo mezclamos con lgicos ser False cuando la cadena est vaca.

null - vaco
No tiene valor, se comporta como cadena vaca, cero o false;

array - vector
Los veremos en profundidad en el prximo captulo vectores en PHP.

object - Objeto
Los veremos ms adelante en el captulo PHP orientado a objetos

Vectores en PHP
Los vectores o array ( a veces mal llamados arreglos ) son listas ordenadas de elementos. Para definir un vector en PHP utilizamos la funcin array:
000 <?php 001 $vector = array ( "elemento 1", "elemento 2" ); 002 ?>
Maximizar Seleccionar PHP

Una vez definido el vector, podemos acceder a sus elementos, sus elementos estarn identificados por un nmero ( empezando por 0 ) o una clave que se puede definir as:

000 <?php $vector = array ( "clave 1" => "elemento 1", "clave 2" => "elemento 2 001 " ); ?> 002 Maximizar Seleccionar PHP

Para acceder a un elemento usaremos [ y ] con su clave ( "clave 1" o 0 ):


000 001 002 003 <?php echo $vector[0];// elemento 1 echo $vector['clave 1'];// elemento 1 ?>
Maximizar Seleccionar PHP

Podemos borrar un elemento de una variable con la funcin unset. Si usamos una clave que no existe, estaremos creando un nuevo elemento ( con la clave que hayamos usado ), si no ponemos clave entre los [], crearemos un elemento nuevo al final del vector:
000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 <?php $vector = array ( "elemento 1", "elemento 2" ); // Aadimos "elemento 3" al final $vector[] = "elemento 3"; // Aadimos un elemento con clave "clave 3" $vector['clave 3'] = "elemento 4"; // Cambiamos el texto al elemento 3 ( 2 contando el 0 ) $vector[2] = "elemento N"; // Borramos el 'clave 3'; unset ( $vector['clave 3'] ); print_r ($vector); /* Array ( [0] => elemento 1 [1] => elemento 2 [2] => elemento N ) */ ?>
Maximizar Seleccionar PHP

El resultado de este ejemplo est disponible aqu.


Array ( [0] => elemento 1 [1] => elemento 2 [2] => elemento 3 [3] => elemento N )

Operadores
Los operadores son expresiones que nos permiten manipular los datos que les pasamos, cada uno de los datos que se le pasa a un operador se llama operando, y segn el nmero de operandos de que disponga un operador estaremos hablando de un operador unario (un operando), binario (dos operandos), ternario...

Los operadores no los utilizamos aisladamente, sino que solemos utilizar mas de uno en una misma expresin compleja, en este caso tendremos que tener en cuenta las normas de preferencia para no encontrarnos con resultados no deseados.

Tabla de contenido

Normas de preferencia Tipos de operadores

Normas de preferencia
Las operaciones no se realizarn de izquierda a derecha sino que se realizarn siguiendo un orden de preferencia que PHP asigna a cada operando, estas son las preferencias de PHP en cuanto a los operadores: new [ ! ~ ++ -- (int) (float) (string) (array) (object) @ */% +-. << >> < <= > >= == != === !== & ^ | && || ?: = += -= *= /= .= %= &= |= ^= <<= >>= print and xor or , Para cambiar el orden en que se realizan las operaciones utilizaremos los parntesis (), consiguiendo que se realicen primero las operaciones del interior del parntesis y, acto seguido, el resto de operaciones siguiendo en cada caso el mismo orden de preferencia anteriormente citado:
000 001 002 003 004 <?php // el operador de multiplicacin es l signo asterisco ( * ) $a = 2 + 4 * 2; // El resultado es 10 $a = (2+4) * 2; // el resultado es 12 ?>
Maximizar Seleccionar PHP

Tipos de operadores
PHP dispone de una gran cantidad de operadores que podramos organizar en las siguientes categoras: Operadores de Aritmtica Operadores de Asignacin Operadores Bit a Bit Operadores de Comparacin Operadores de Control de Errores Operadores de ejecucin Operadores de Incremento Operadores de Lgica Operadores de Cadena Operadores de Matrices Operadores de Tipo Estos operadores en su mayor parte sn para trabajar con valores numricos, a excepcin de los 4 ltimos de la lista anterior, y se explicaran uno a uno en el curso de operadores PHP

Operadores de Aritmtica
Los operadores de aritmtica sn los operadores bsicos para el trabajo con nmeros, nos permiten sumar dos valores, restarlos, dividirlos... Se trata de operadores binarios en todos los casos ya que requieren dos operandos para funcionar correctamente. Los operadores aritmticos existentes son los siguientes: Adicin (+) - Devuelve la suma de los dos operandos que recibe el operador.
000 <? 001 $a = 1 + 2; // $a toma valor 3 002 ?>
Maximizar Seleccionar PHP

Substraccin (-) - Devuelve la diferencia entre el primer y el segundo operando. Multiplicacin (*) - Devuelve el producto de los operandos. Divisin (/) - Devuelve el cociente en valor flotante de los operandos. Mdulo (%) - Devuelve el resto de dividir el primer operando entre el segundo.Este operador es muy til para saber si un nmero es mltiple de otro
000 <? 001 $a = 3 % 2; // $a toma valor 1 002 ?>
Maximizar Seleccionar PHP

. Al tratar de operar matemticamente con cadenas u otros tipos de datos, PHP intentar transformar a enteros y luego realizar las operaciones deseadas.

Operadores de Asignacin
Los operadores de asignacin, sn aquellos que nos permiten modificar el valor de una variable, el operador de asignacin bsico es el 'es igual a' (=), que da el valor que lo sigue a la variable que lo precede:
000 <? 001 $miVariable = 'suValor'; 002 ?>
Maximizar Seleccionar PHP

Asimismo, combinando los operadores de aritmtica, bit a bit o de cadenas con el operador de asignacion, conseguimos los 'operadores combinados', con los que podemos realizar una operacion de asignacion conjuntamente con otra operacion:
000 001 002 003 004 <? $a = 1; $a += 1; // Sumamos y asignamos $a = $a + 1; // Operacion equivalente ?>
Maximizar Seleccionar PHP

En este ejemplo vemos que podemos poner el operador de suma seguido del de asignacion para incrementar el valor de la variable, asimismo podriamos usar el operador de concatenacion (.=), el de multiplicacion (*=)... consiguiendo efectos similares.

Operadores de Comparacin
Los operadores de comparacin son operadores en su mayora binarios que nos permiten comparar variables devolviendo un valor booleano a 1 (TRUE) si se cumple la condicin que expresan y a 0 (FALSE) en el caso contrario. Los operadores binarios de comparacin son: Igual (==) - Devuelve 1 si los operandos son iguales aunque sean de tipo distinto. Idntico (===) - Devuelve 1 si los operandos son iguales y del mismo tipo. Diferente (!= o <>) - Devuelve 1 si los operandos sn distintos. No idnticos (!==) - Devuelve 1 si son distintos o de tipo diferente. Menor que (<) - Devuelve 1 si el primer operando es mas pequeo que el segundo. Mayor que (>) - Devuelve 1 si el primer operando es mas grande que el segundo. Menor o igual que (<=) - Devuelve 1 si el primer operando es mas pequeo o igual que el segundo. Mayor o igual que (>=) - Devuelve 1 si el primer operando es mas grande o igual que el segundo. Estos operadores se usan mayormente como condicin para las estructuras de control. El operador de comparacin ternario es el '?:', este operador, evala una condicin, que

puede ser una operacin de comparacin binaria y si se cumple ejecuta el segundo operando, de lo contrario ejecuta el tercero:
000 <? 001 echo ($variable == 1) ? 'Vale 1' : 'Vale mas de uno'; 002 ?>
Maximizar Seleccionar PHP

Este ejemplo imprime 'Vale 1' si se cumple la expresion '$variable == 1' de lo contrario imprime 'Vale mas de uno'.

Operadores de Control de Errores


Para evitar que se muestre en pgina un determinado error que se puede producir eventualmente en una linea PHP dispone del operador de control de errores. Este operador que se representa con el signo arroba (@), permite evitar que se imprima en la pgina de resultado un error prodcido por la ejecucin del cdigo PHP en una lnea determinada:
000 001 002 003 <?php echo 'Hola mundo'; @ funcionquenoexiste (); // Esto debera producir un error ?>
Maximizar Seleccionar PHP

Encontrars mas informacion sobre este operador y otros mtodos para evitar errores en este artculo del usuario include.

Tratamiento de errores en PHP


Cuando se produce un error eventual en el cdigo PHP de nuestra Web, el intrprete Zend imprime un mensaje de error en la pgina generada como respuesta a la peticin HTTP hecha por el navegador de nuestro visitante. En este caso nuestro visitante podr ver que ha sucedido un problema en nuestro servidor y esto no nos interesa en absoluto, ya que dar una imagen de poca profesionalidad a nuestro sitio cosa poco aconsejable. En este artculo voy a intentar explicaros cmo evitar que, en el caso que se podujera un error PHP, este sea enviado al navegador del visitante, y distinguiremos dos casos: Evitar un error concreto Si tenemos una lnea que sabemos que puede producir un error, por ejemplo al intentar escribir en un fichero, pondremos el operador @, que nos evitar el error:

000 001 002 003 004

<?php $fichero = fopen("file.txt", "w"); @ fwrite($fichero, "Texto a escribir"); fclose($fichero); ?>


Maximizar Seleccionar PHP

Evitar todos los errores En el caso que lo que queramos sea evitar que sea mostrado cualquier tipo de error en la pgina de respuesta a la peticin HTTP, lo que deberemos hacer es cambiar el procesador de errores por defecto por otro hecho por nosotros mismos:
000 001 002 003 004 005 006 007 008 009 <?php function sinErrores ($errno, $errstr) { echo '<!-- Se produjo un error -->'; } set_error_handler('sinErrores'); // Cualquier error que se produzca // a partir de aqui NO ser impreso ?>
Maximizar Seleccionar PHP

De esta forma, la funcin set_error_handler() indica al intrprete Zend que cuadndo haya un error lo trate con la funcin sinErrores() que en lugar de mostrarnos los errores solamente pondr un comentario en el cdigo HTML indicando donde se produjo el error. Si queremos en un momento dado que los errores vuelvan a mostrarse usaremos la funcin restore_error_handler():
000 001 002 003 004 005 006 <?php restore_error_handler(); // Cualquier error que se produzca // a partir de aqui SI ser impreso ?>
Maximizar Seleccionar PHP

Espero que les sea de mucha ayuda, cualquier comentario ser bien recibido, atentamente: include

Operadores de Incremento
Los operadores de incremento (++) permiten aumentar en una unidad el valor de una variable numrica, los de decremento (--) por lo contrario disminuyen la misma variable en una unidad.

Estos operadores son operadores unarios por lo que solo reciben un operando al que incrementan o decrementan segn el operador. Estos operadores pueden ponerse delante del operando, en ese caso la operacin devolver el valor una vez operado, o despus, caso en el que la operacin devolver el valor antes de operar:
000 001 002 003 004 <? $variable = 2; echo $variable++; // Imprime 2 y luego incrementa echo ++$variable; // incrementa y luego imprime 4 ?>
Maximizar Seleccionar PHP

Este tipo de operador se utiliza mucho para el tercer parmetro de un bucle for.

Operadores de Logica
Los operadores de Lgica nos permiten crear expresiones mas complejas para evaluar nuestras estructuras de control, permitiendonos enlazar varias operaciones de comparacin con los diferentes operadores booleanos. Estos operadores sn mayoritariamente binarios, por lo que reciben 2 operandos, dependiendo de estos operandos (de valor 0 o 1) devolvera 0 (FALSE) o 1 (TRUE), los operadores lgicos binarios sn: Y (&& o and) - Devuelve 1 si ambos operandos sn 1 O (|| o or) - Devuelve 1 si algn operando es 1 O exclusivo (xor) - Devuelve 1 si solo 1 operando es 1 Veamos un ejemplo para ver como funcionan estos operadores:
000 <? 001 echo ((1 == 1)&&(2 != 2)); // Devuelve 0 002 ?>
Maximizar Seleccionar PHP

Existe otro operador lgico, en este caso unario, que es el operador No (!), este operador delante de un valor binario, devuelve el valor contrario (0 si es 1 y 1 si es 0):
000 <? 001 echo !((1 == 1)&&(2 != 2)); // Devuelve 1 002 ?>
Maximizar Seleccionar PHP

En esta expresion primero evaluaremos los parentesis, el primero vale 1 porque se cumple, el segundo 0 porque no se cumple, como usamos Y (&&) y no son 1 los dos vale 0, entonces lo negamos y vale 1

Operadores de Cadena
En esta categora encontramos el operador binario de concatenacion (.), que se encarga de unir dos cadenas dadas la una a continuacion de la otra:
000 001 002 003 <? $texto = 'hola ' . 'mundo'; echo $texto; ?>
Maximizar Seleccionar PHP

A su vez, existe un operador que hemos incluido entre los operadores de asignacion, que es el operador de asignacin sobre concatenacin (.=), este operador concatena a una variable un valor dado de la siguiente manera:
000 001 002 003 004 <? $texto = 'hola '; $texto .= 'mundo'; echo $texto; ?>
Maximizar Seleccionar PHP

Este operador nos ser de gran utilidad para almacenar una gran cantidad de datos en una misma variable de manera limpia, veamos un ejemplo:
000 001 002 003 004 005 006 007 008 009 010 011 <? $html = "<html>\n"; $html .= "<head>\n"; $html .= "<title>Mi pgina</title>\n"; $html .= "</head>\n"; $html .= "<body>\n"; $html .= "Este es el contenido de mi\n"; $html .= "preciosa pgina\n"; $html .= "</body>\n"; $html .= "</html>\n"; echo $html; ?>
Maximizar Seleccionar PHP

Como veis, hemos almacenado una pgina HTML en la variable $html de forma limpia y bien presentada para finalmente imprimir el resultado.

Estructuras de control
Porque los scripts PHP no son lineales, debemos poder controlar la ejecucion de una accin o de un determinado bloque de acciones, para hacer esto, PHP dispone de lo que se llama estructuras de control, que nos permiten ejecutar o no, una o mas veces un determinado bloque de acciones.

Estas estructuras sn: if while do..while for foreach switch Y se explicarn una a una en el curso de estructuras de control

Condicional if
La estructura if nos permite ejecutar un bloque de acciones si se cumple una determinada condicin, de lo contrario nos permite ejecutar otro bloque de acciones identificado por la sentencia else, si el resultado de la condicin es distinto de 0, se ejecutarn las acciones del if, de lo contrario las del else:
000 001 002 003 004 005 006 007 <? if($var1 == 12){ echo 'La variable vale 12'; } else { echo 'La variable tiene otro valor'; } ?>
Maximizar Seleccionar PHP

La condicin, se escribe entre parntesis a continuacin de la palabra if, y esta formada por operaciones PHP, sobre todo por operaciones lgicas y de comparacin. Hay otra sentencia que usamos a menudo para unir ms de un condicional if, es la sentencia elseif, sta nos permite dar otra condicin por si no se ha cumplido la primera, despus de elseif podemos volver a usar else con normalidad:
000 001 002 003 004 005 006 007 008 009 010 <? if($var1 == 12){ echo 'La variable vale 12'; } elseif($var1 == 3){ echo 'La variable vale 3'; } else { echo 'La variable tiene otro valor'; } ?>
Maximizar Seleccionar PHP

En este caso, si var1 es distinto de 12, evaluar si vale 3, si es as mostrar el segundo mensaje, si no el tercero.

Bucle while
Esta instruccion nos permite efectuar un bloque de acciones mientras se cumpla una determinada condicion, cuando deje de cumplirse, se continuar ejecutando el resto del cdigo PHP, la condicion se cumple mientras no de resultado 0 y esta formada por operaciones PHP, sobretodo por operaciones lgicas y de comparacion.
000 001 002 003 004 005 006 <? $var1 = 0; while($var1 < 10){ echo "\$var1 = $var1<br>"; $var1++; // Incrementamos la variable } ?>
Maximizar Seleccionar PHP

Hay que tener cuidado con este tipo de bucle, en el interior del bloque de acciones siempre se debe modificar algun parametro de la condicion para que esta acabe cumpliendose, de lo contrario crearemos un bucle infinito.

Bucle do while
El bucle do while es en su esencia igual al bucle while con la diferncia de que ejecuta las acciones antes de comprobar la condicion, consiguiendo que se ejecuten las acciones una vez si la condicion retorna 0 o FALSE, as, este bucle se ejecutar siempre una vez mas que while si tienen la misma condicion:
000 001 002 003 004 005 006 <? $var1 = 0; do { echo "\$var1 = $var1<br>"; $var1 ++; } while ($var1 <= 10); ?>
Maximizar Seleccionar PHP

Si ejecutais este ejemplo, veris cmo imprime: $var1 = 0 $var1 = 1 $var1 = 2 $var1 = 3 $var1 = 4 $var1 = 5 $var1 = 6 $var1 = 7 $var1 = 8

$var1 = 9 $var1 = 10 Aunque en el ltimo caso no se haya cumplido la condicion de ya que $var1 no seria mas pequeo que 10.

Bucle for
El bucle for nos permite ejecutar un determinado bloque de acciones un nmero determinado de veces, a esta estructura le pasaremos tres parmetros que separaremos por punto y coma (;) y que sern: accion inicial - Inicializa la variable de control del bucle condicion - Se evalua en cada iteracion, cuando devuelve 0 o FALSE se continua ejecutando el cdigo de despus del for accion - Se ejecuta en cada bucle y debe modificar la variable de la condicion Vamos a ver un ejemplo para que nos quede todo claro, ya que el concepto puede costar un poco de comprender.
000 001 002 003 004 <? for ($var1 = 0; $var1 < 10; $var1++){ echo "\$var1 = $var1"; } ?>
Maximizar Seleccionar PHP

Antes de empezar el bucle se ejecutar $var1 = 0, entonces se ejecutar el interior del bucle y $var1++ hasta que se cumpla $var1 < 10.

Bucle foreach
El bucle foreach nos permite iterar para cada elemento de un vector, su sintaxis es sencilla, solo hay que indicar el identificador de la matriz, la expresion as y seguidamente la variable que identificar el valor del elemento:
000 001 002 003 004 005 <? $vector = array("uno", "dos", "tres"); foreach ($vector as $valor) { echo "Valor: $valor<br>"; } ?>
Maximizar Seleccionar PHP

Esta expresin tambien nos permite trabajar con vectores con indice, en este caso trabajaremos as:
000 <? 001 $vector = array( 002 "uno" => 1,

003 004 005 006 007 008 009 010

"dos" => 2, "tres" => 3, "diecisiete" => 17 ); foreach($vector as $indice => $valor) { print "\$vector[$indice] => $valor.\n"; } ?>

Como vemos en este caso especificamos la variable que identifica el indice y la que identifica el valor separadas por =>

El ciclo switch
En muchas ocasiones, programando en PHP, nos encontramos que queremos hacer una u otra accin dependiendo del valor de una variable, en este caso, podramos usar una sucesin de condicionales if, pero el cdigo resultante ser confuso y difcil de modificar en el futuro. Pero PHP y en general todos los lenguajes de programacin de un nivel mas o menos alto, dispone de un ciclo que nos ir como anillo al dedo en este caso, el ciclo switch que nos realizar un bloque de acciones para cada valor de una variable dada.
000 001 002 003 004 005 006 007 008 009 010 011 <? switch ($i) { case 0: echo "Variable en valor bajo"; break; case 1: echo "Variable en valor alto"; break; default: echo "La variable no es binria"; } ?>

Este cdigo har un switch para la variable $i, en el caso que esta sea 0, imprimir el mensaje 'Variable en valor bajo', si es 1 imprimir 'Variable en valor alto' y sino, nos dir que la variable no es un nmero decimal. Vemos que cada valor se relaciona con un caso, en el interior del cual realizamos las acciones requeridas y una instruccin llamada break, de lo contrario, se seguiran ejecutando las instrucciones de los dems casos. Finalmente encontramos un caso especial llamado default, este caso se activar si no se ha activado ninguno de los casos anteriores. En el artculo 'Paso de variables por URL' podemos ver y ejecutar un ejemplo de ciclo

switch.
Paso de variables por URL Vamos a ver un tema muy sencillo del trabajo con PHP pero bsico para cualquier aplicacin web, para los que ya conocis el trabajo con variables pasadas por url es posible que os ponga un poco al da sobre este tipo de tarea. El tema consiste en acceder a una direccin del tipo pagina.php?variable1=valor1&variable2=valor2 y que el intrprete PHP acceda a los valores pasados en la direccin de la pgina para configurar la pgina que se mandar al usuario. 000 001 002 003 <? echo '<b>variable1:</b> '.$_POST["variable1"]; echo '<br><b>variable2:</b> '.$_POST["variable2"]; ?>

Por ejemplo, vamos a mostrar un mensaje en una pgina dependiendo de un parmetro pasado por url:
variables.php 000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 <? if(isset($_GET["mensaje"])) switch ($_GET["mensaje"]){ case 0: echo 'Bienvenido a mi web'; break; case 1: echo 'Mensaje 2'; break; case 2: echo 'ltimo mensaje'; break; default: echo 'Error en el parametro'; } else echo 'No se pas parametro'; ?>

Este cdigo, lee el parmetro llamado mensaje, la manera de hacerlo es a partir de $_GET["mensaje"], asi como si hubiera otro parmetro (variables.php?mensaje=1&usuario=343) accederamos a el desde $_GET["usuario"]. A partir de ah, miramos si esta definida la variable para ver si esta pasada con la funcin isset, luego hacemos un ciclo switch para mostrar un u otro mensaje segn el valor de la variable pasada. El ejemplo, nos mostrar un mensaje distinto dependiendo de si mensaje vale 0, vale 1, vale 2, tiene otro valor o no esta definido. Nota: Debemos observar que segn que parmetros pasemos por URL algunos buscadores cmo google, no agregaran nuestra url, por ejemplo, google no indexa pginas con la variable id.

Las funciones

En toda aplicacin mas o menos compleja hay bloques de acciones que realizamos mas de una vez y PHP no es una excepcin, para que no tengamos que escribir estas acciones repetidamente, todos los lenguajes de un nivel mas o menos alto incorporan lo que llamamos funciones. Para declarar una funcin utilizamos la expresin function seguida del nombre que queremos dar a la funcin, a continuacin y entre parntesis, los argumentos que recibe la funcin y finalmente y entre corchetes el cdigo que esta debe ejecutar, veamos un ejemplo:
000 001 002 003 004 <? function miFuncion ($argumento_1, $argumento_2) { // Codigo de la funcion } ?>

Tabla de contenido

Llamando a una funcion El valor de retorno

Llamando a una funcion


Una vez creada la funcin, la debemos llamar como una funcin prefabricada de PHP, por su nombre pasando los argumentos que necesita. Veamos un ejemplo:
000 <? 001 miFuncion("hola", "pepe"); 002 ?>

El valor de retorno
Es interesante saber que las funciones pueden devolver un valor al lugar donde las llamamos, esto se hace gracias a la instruccin return seguida del valor de retorno, veamos este ejemplo:
000 001 002 003 004 005 <? function saludo($nombre,$momento){ return "Hola $nombre buenas $momento"; } echo saludo("Pepe","tardes"); ?>

Este ejemplo dar como resultado: Hola Pepe buenas tarde

Procesamiento de formularios
Al enviar un formulario HTML, los datos sn enviados al servidor Web y este es capaz de procesarlos y realizar un seguido de acciones en funcin de los datos introducidos, los datos del formulario se envan utilizando uno de los siguientes mtodos, dependiendo del method del formulario: GET - Los datos del formulario sn enviados al servidor a travs de los encabezados HTTP, estos datos sn visibles en la URL y en los logs del servidor, es poco recomendado para datos de usuario. POST - Los datos del formulario sn enviados al servidor como datos de la peticin, no se recomienda para pasar parametros de modularizacin, paginacin... Estos datos, podemos recojerlos desde nuestra aplicacin PHP utilizando los arrays superglobales, $_GET y $_POST de manera respectiva. De esta manera, cuando el usuario rellena un campo cmo el siguiente...
000 <form method="POST"> 001 <input type="text" name="telefono"> 002 </form>

... el servidor recibe los datos y PHP genera la variable $_POST['telefono'], que podemos mostrar por ejemplo con un echo:
000 <?php 001 echo $_POST['telefono']; 002 ?>

Exactamente igual pasar cuando el mtodo especificado sea GET (siempre, tambien con POST los escribiremos en maysculas). Puedes ver algunos ejemplos usando el mtodo GET en este artculo de Philippe, saludos y gracias por su atencin.

Cookies en PHP
Antes de leer este artculo recomiendo leer el artculo cookies en JavaScript pues aqu no explicare que es una cookie, slo como usarla con PHP. Para usar cookies en PHP, tenemos que tener en cuenta que la cookie se envia antes de enviar la pgina, es decir, que enviaremos la cookie al navegador antes de enviar ningn caracter de la pgina o recibiremos un error. La funcin que usaremos para enviar una cookie es setcookie, que funciona de la siguiente

manera:
000 <?php 001 setcookie (nombre,valor,fecha); 002 ?>

Donde 'nombre', ser un identificador de la cookie que contendr el texto indicado por 'valor' y que tendr vigncia hasta 'fecha'. Vamos a hacer un ejemplo que incrementara el valor de una cookie cada vez que se visite cierta pgina:
000 001 002 003 004 <?php $visitas = $_COOKIE["visitas"]+1; setcookie ("visitas", $visitas, time () + 7*24*60*60); echo "Nos has visitado $visitas veces"; ?>

Vemos que accedemos al valor de la cookie 'visitas' con un array superglobal que almacena todas las cookies de la pgina y le sumamos 1:
000 <? 001 $visitas = $_COOKIE["visitas"]+1; 002 ?>

Aunque dependiendo de la configuracion de PHP, podremos acceder a la cookie 'visitas' directamente con la variable $visitas:
000 001 002 003 004 <?php $visitas++; setcookie ("visitas", $visitas, time () + 7*24*60*60); echo "Nos has visitado $visitas veces"; ?>

Si lo deseas, puedes ver un ejemplo operativo del cdigo usado en este artculo.

Envio de Emails
En este articulo aprenderemos a enviar emails (correo electrnico) de una forma compleja, gracias a mis experiencias. Antes de nada recordaremos la chuleta:
000 <? 001 mail("destinatario","asunto","cuerpo","adicional"); 002 ?>

Un ejemplo:
000 <? 001 mail("webmaster@programacionweb.net","Ejemplo de envio","Este email ha sido enviado a:\n\n\twebmaster@programacionweb.net","Reply to: zarator@programacionweb.net"); 002 ?>

Examinaremos esto ... el mensaje se enviara a: Destinatario: webmaster@programacionweb.net Asunto: Ejemplo de envo Responder a: zarator@programacionweb.net Cuerpo: Este email ha sido enviado a: webmaster@programacionweb.net Ahora veremos con detalle las partes de los emails: Destinatario El destinatario de un email ser el email donde se enviar el email. Este campo es obligatorio ya que sin email no podr enviar el mensaje. Podremos poner mail("Pepe Jos <elpepe@hotmail.com>", [...] o mail("elpepe@hotmail.com", [...] de las dos formas se pueden enviar. Asunto El asunto de un mensaje es una introduccin al contenido del mensaje. Este campo no es obligatorio ya que si no lleva asunto aparece (sin asunto), si el asunto es muy largo se te abreviar con ... (tres puntos) . Cuerpo del Mensaje o Contenido En el contenido del mensaje escribirs el motivo del email. No es obligatorio, pero por lgica deberas de escribir algo. El email puede ser de tres tipos (plano,html y mixto) pero mejor utilizar (plano y html) Si es Plano: El mensaje ser una lnea de texto .. es decir no se ejecutar nada solo ser texto, menos \x. Hay tres cdigos \t, \n y \r (esto tambin se ejecuta en alertas html). \n = salto de lnea \t = sangra \r = vuelta de lnea Nota: En algunos programas o servidores se confunde \r con \n (salto de linea).

Si es html:

Aqu se ejecuta todo tipo de html. Si el receptor del email usa hotmail debers saber que este modifica los cdigos como los <a href='[externo?id=tuweb]'> (pone cabecera) <p onclick=''> (si antes era onclick='a()' ahora se queda sin nada), es decir censura algunos cdigos. Este tipo de mensaje puede traerte problemas, ya hackers utilizan este mtodo de email para que rescribas tu contrasea hacindose pasar por un error. Puede ocultarse bien as que te recomiendo que no hagas mucho caso.

Adicionales
Estos caractersticas se aaden despus del contenido del mensaje y van precedidos de un \n. Estos se muestran en la cabecera. Como su nombre indica no son obligatorios. Un ejemplo popular:
000 mail($to, $subj, $body, "from: Pepe\nReply to: Manuel");

Documntate para saber los tipos de caractersticas de email adicionales. Si utilizas tripod.lycos.es como alojamiento te ser imposible cambiarle el from lo cual seria tucuenta@lycos.es y en lo adicional siempre pone from script: pagina.php. Puedes cambiar el from poniendo "\nFrom: &lt; $from &gt" el valor de $from no puede ser muy complejo es decir puedes poner webmaster@hotmail.com pero no webmaster <webmaster@hotmail.com>. Lo otro de la from script: pagina.php no podrs quitarlo pero tienes a favor que algunos servidores no ponen este adicional, solo ponen los conocidos. En hotmail solo te sale si en opciones > opciones de mensajes activas Completo para visualizar el mensaje, adems te vendrn otros datos interesantes del mensaje. Una ancdota fue de que a un colega le colaron un virus desde un email que incitaba a descargarselo. Observe que despus de ejecutarse el virus llegaron 2 mensajes mas con virus uno de ellos deca que haba un nuevo virus que te descargaras sobreelvirus.pif (que tambin era virus) y en el siguiente deca que haba un portal de seguridad www.seguridadvirus.com y se adjuntaba www.seguridadvirus.com (una cosa muy curiosa) puedes llamar a un archivo www.yo.txt y por tanto la extensin *.com es un archivo MS-DOS y por tanto puede ser virus. Como no tenia accionada la opcin completa del mensaje la accione y vi que en lo adicional venia dos cosas como recived from: recived: y salan 2 ips .. una seria del servidor y otra del hacker. En los 3 mensajes venia la misma ip (ident personal), y por tanto doy por echo que los dos ltimos mensajes eran virus. Si no os habis dado cuenta no existen mensajes annimos, "nadie" puede enviar

"annimamente". Gente avanzada en programacin si puede o sabe, un email nunca es anonimo por completo queda la ip que pueden localizarte con ella, recordemos que es xxx.xxx.xxx.xxx Termino con esto los adicionales .. aun que no sean obligatorios aportan mucha informacion. Si se pueden enviar archivos con emails aqu pongo un ejemplo:

En definitiva te aconsejo que utilices a partir de ahora mas esta funcin en tu web, puedes utilizar un sistema de listas de correo en tu web y utilizar lo aprendido aqu.

Sesiones PHP
Utilizaremos sesiones para almacenar una serie de variables en el servidor relacionndolas ( grcias a una variable pasada por cookie o por URL ) con un usuario concreto para que estn disponibles en diferentes pginas de nuestro sitio web. Una vez almacenada una variable de sessin, podremos leerla desde todas las pginas de nuestra web mientras la sesin no se destruya.

Tabla de contenido

Guardar una variable Leer una variable guardada Borrar una variable

Guardar una variable


El soporte para sesiones de PHP nos permite inicializar facilmente una sesin utilizando session_start y gracias al vector superglobal $_SESSION, podremos trabajar con sesiones como si de cualquier otro vector se tratara:
000 001 002 003 004 005 <?php // Inicializamos sesion session_start(); // Guardamos una variable $_SESSION['nombre'] = 'Fernando Daz'; ?>

La nica cosa que deberemos tener en cuenta, es que si usamos cookies no podremos haber enviado ni un solo caracter ( ni siquiera un espacio ) al navegador antes del session_start, el siguiente ejemplo nos dar error por el espacio de la lnea 0:
000 <?php 001 // Inicializamos sesion 002 session_start(); 003 ?>

Leer una variable guardada


Si hemos guardado una sesin, podremos acceder a sus variables desde todas las pginas PHP de nuestra web uando sean visitadas por el mismo usuario.

Esto lo haremos simplemente inicializando la sesin y con el mismo vector $_SESSION, para ver si existe una variable de sesin determinada, usaremos isset cmo con cualquier otra variable.:
000 001 002 003 004 005 006 007 008 009 010 011 <?php // Inicializamos sesion session_start(); // Comprovamos si existe la variable if ( isset ( $_SESSION['nombre'] ) ) { // Si existe echo $_SESSION['nombre']; } else { // Si no existe echo 'desconocido'; } ?>

Borrar una variable


Podemos borrar una variable de sesin usando la funcin unset, pero adems podemos eliminar la sesin con session_destroy:
000 001 002 003 004 005 006 007 <?php // Inicializamos sesion session_start(); // Borramos la variable unset ( $_SESSION['nombre'] ) { // Borramos toda la sesion session_destroy(); ?>

PHP orientado a objetos


Cuando a principios de los aos 80 se empez a experimentar la Programacin Orientada a Objetos (POO) esta ha ido suplantando la programacin tradicional, por esta razn y aunque PHP no sea orientado a objetos, PHP incorpora sus principales caractersticas para que podamos trabajar con clases y objetos.

Tabla de contenido

Clases y Objetos Mtodos y atributos Herencia de clases Constructores y destructores Encapsulamiento

Clases y Objetos
Para entender la programacin orientada a objetos debemos primero entender lo que es una clase, pero primero diremos que un objeto es un conjunto de atributos y mtodos agrupados. Una clase es un grupo de objetos que comparten los mismos atributos y mtodos, veamos como podemos crear una clase llamada Imagen:
000 001 002 003 004 <? class Imagen { // Aqu el cdigo de la clase } ?>

Mtodos y atributos
Esta clase contendr un seguido de atributos, que definiremos con la palabra reservada var, y mtodos, que programaremos como funciones usando function. Para crear un objeto de tipo imagen se ejecutar el constructor de la imagen que ser el mtodo con el mismo nombre que la clase o en PHP5 el mtodo llamado __construct(), veamos un ejemplo:
000 001 002 003 004 005 006 007 008 009 010 011 012 <? class Imagen { var $src; // Estos sn los atributos var $border; // de los objetos asociados // Esta funcion es el constructor function Imagen($src,$border) { $this->src=$src; $this->border=$border; } } // Creamos un objeto imagen $logo = new Imagen("logo.gif",3); ?>

Tambin podemos crear mas mtodos ademas del constructor, vamos a completar el ejemplo con un mtodo que imprima la imagen en el navegador del visitante:
000 <? 001 class Imagen { 002 var $src; 003 var $border; 004 function Imagen($src,$border) { 005 $this->src=$src; 006 $this->border=$border; 007 }

008 009 010 011 012 013 014 015 016 017 018 019 020

// Esta funcion es un mtodo de Imagen function Imprimir() { echo "<img src=\""; echo $this->src; echo "\" border=\""; echo $this->border; echo "\">"; } } $logo = new Imagen("logo.gif",3); // Llamamos el nuevo mtodo $logo->Imprimir(); ?>

Puedes ver cmo efectivamente este ejemplo funciona y es un magnifico ejemplo de cmo nos puede simplificar algo rutinario como la creacin de mltiples imgenes PHP orientado a objetos

Tabla de contenido

Clases y Objetos Mtodos y atributos Herencia de clases Constructores y destructores Encapsulamiento

Herencia de clases
Si resulta que hemos creado una clase pero que ademas vemos que hay unos determinados objetos de esta clase que comparten otras cualidades por lo que queremos englobarlos en una clase distinta, lo que podemos hacer es ponerlos en una subclase, los objetos de la subclase, mantendrn todos los mtodos y atributos de la clase padre y ademas compartirn los de la clase derivada. Vamos a ver cmo podemos definir una subclase de la clase Imagen definida en la pagina anterior para imgenes de tamao 468 x 60, esta subclase se llamar Banner y ser de la siguiente manera:
000 <? 001 // Definimos la subclase de Banner 002 class Banner extends Imagen { 003 // Esta es la nueva funcion Imprimir para banners 004 function Imprimir() { 005 echo "<img src=\""; 006 echo $this->src; 007 echo "\" border=\""; 008 echo $this->border; 009 echo "\" width=\"468\" height=\"60\">"; 010 }

011 } 012 ?>

Y finalmente crearemos el objeto $banner_1 y lo imprimiremos:


000 001 002 003 <? $banner_1 = new Banner("anunciante1.gif",0); $banner_1->Imprimir(); ?>
Maximizar Seleccionar PHP

Tener en cuenta que en el cdigo de la subclase falta el cdigo de la clase Imagen, sino no funcionar. Vemos que no declaramos constructor para banner, podemos crearle un constructor especifico, pero si no lo hacemos cuando hagamos new Banner, llamaremos al constructor de la clase padre Imagen. Cuando hacemos Imprimir() del objeto perteneciente a la base derivada Banner, se llama al mtodo Imprimir de Banner y no al de Imagen aunque se llamen igual PHP orientado a objetosEn PHP5, las cosas son un poco distintas, porque el motor Zend Engine 2, est preparado para trabajar con Objetos a fondo, esto implica una gran cantidad de cambios a nivel interno y los siguientes cambios externos:

Tabla de contenido

Clases y Objetos Mtodos y atributos Herencia de clases Constructores y destructores Encapsulamiento

Constructores y destructores
Si trabajamos con PHP5, para definir un constructor, usamos el mtodo __construct, vamos a ver un ejemplo:
000 <? 001 class Imagen { 002 var $src; // Estos sn los atributos 003 var $border; // de los objetos asociados 004 // Esta funcion es el constructor 005 function __construct($src,$border) { 006 $this->src=$src; 007 $this->border=$border; 008 } 009 }

010 // Creamos un objeto imagen 011 $logo = new Imagen("logo.gif",3); 012 ?>

Ademas tenemos la opcin de crear un destructor que se ejecutar cuando el objeto va a ser eliminado dela memoria, el constructor se define con el mtodo __destruct.

Encapsulamiento
Este es un concepto nuevo en PHP5, el encapsulamiento permite el uso de variables y mtodos internos a un objeto que no pueden ser accedidos internamente, de esta manera existen tres tipos de objetos: public - Son accesibles desde todo el cdigo. protected - Son accesibles desde la clase actual y las clases derivadas. private - Son accesibles desde la clase actual Vamos a ver el ejemplo de antes pero con atributos protegidos:
000 001 002 003 004 005 006 007 008 009 010 011 012 <? class Imagen { protected $src; // Estos sn los atributos private $border; // de los objetos asociados // Esta funcion es el constructor function __construct($src,$border) { $this->src=$src; $this->border=$border; } } // Creamos un objeto imagen $logo = new Imagen("logo.gif",3); ?>

Y estos son los cambios principales de PHP5, ademas de incorporar un constructor de copia
000 __clone

y algunas otras opcione

Image GD, descripcin y ejemplos


A menudo, cuando estamos programando una aplicacin, contamos con una gran cantidad de datos interesantes para el usuario pero que no podemos mostrar en forma de texto debido a su cantidad o complejidad, en estos casos, es cuando nos vemos obligados a generar grficas al vuelo para mostrar los datos de forma clara. Las aplicaciones en PHP, no sn una excepcin, y a menudo nescesitamos mostrar los datos en forma de grfica, y eso significa crear una imagen dinmicamente.

Image GD, es una biblioteca de funciones para la creacin y modificacin al vuelo de imagenes muy potente, que nos permite hacer verdaderas maravillas como creacin de grficas de quesito en 3D, cambio de tamao de imagenes y muchas mas aplicaciones todas ellas muy interesantes. Esta biblioteca, tiene una versin para PHP que podremos instalar facilmente en nuestro servidor si tenemos permisos de administrador, y que viene instalada en la mayora de servidores linux del mercado. La versin para PHP biblioteca contiene una gran cantidad de funciones para el dibujo y el tratamiento de imagenes que iremos viendo en futuros artculos, y que nos permiten realizar excelentes reportes visuales de nuestros datos, como los de los siguientes ejemplos: Grfica de lineas

Grfica de quesitos en 3 dimensiones ( artculo )

Creacin de una imagen con GD

El primer paso para empezar a trabajar con grficos y image GD, es la creacin de una imagen, que puede ser en blanco (para hacer una grfica, un dibujo...) o bien a partir de una imagen existente (para editarla, redimensionarla...).

Tabla de contenido

Creacin de una imagen en blanco Cargar una imagen existente

Creacin de una imagen en blanco


Para crear una imagen en blanco y poder dibujar sobre ella, usaremos la funcin imagecreate, a la que le indicaremos el tamao de la imagen que queremos crear, la funcin devolver un identificador de la imagen que, en el ejemplo, almacenamos en la variable $im. EL siguiente paso es crear un color, que al ser el primero creado, ser usado como color de fondo. Para crear colores, usamos la funcin imagecolorallocate, a la que le pasamos el id de la imagen y los valores de rojo, verde y azul (en este rden)
000 001 002 003 004 005 006 007 008 009 010 <?php $im = @imagecreate(100, 100) or die("Error creando la imagen"); $fondo = imagecolorallocate($im, 255, 255, 255); // blanco // Aqui podemos trabajar con la imagen header("Content-type: image/png"); imagepng($im); imagedestroy($im); ?>

Finalmente, como vemos en el ejemplo, enviamos al navegador los encabezados de PNG (header), enviamos la imagen al navegador (imagepng) y liberamos la memria (imagedestroy).

Cargar una imagen existente


La carga de una imagen existente es mas o menos cmo el caso anterior, pero en lugar de usar imagecreate, usaremos una funcin de las de la siguiente lista: imagecreatefromgif - Crea una imagen a partir de una imagen gif existente imagecreatefromjpeg - Crea una imagen a partir de una imagen jpeg existente imagecreatefromjpeg - Crea una imagen a partir de una imagen png existente imagecreatefromjpeg - Crea una imagen a partir de una imagen bmp para wap existente

imagecreatefromgd2, imagecreatefromgd2part, imagecreatefromgd, imagecreatefromstring, imagecreatefromxbm, Imagecreatefromxpm Que dependiendo de la versin de GD, estarn o no disponibles, para saverlo, haremos:
000 <?php 001 var_dump(gd_info()); 002 ?>

Veamos una ejemplo de carga de una archivo png:


000 001 002 003 004 005 <?php $im = imagecreatefrompng("image.png"); header("Content-type: image/png"); imagepng($im); imagedestroy($im); ?>

Uso del color con GD


La utilizacin de colores en GD es algo mas compleja que en HTML aunque ambos utilizan el modelo RGB.

Tabla de contenido

Crear un color Obtencion de un color de la imagen Utilizacin del color

Crear un color
Para usar un determinado color con GD en PHP, primero tenemos que reservar ese color en la imagen. Para reservarlo usaremos la funcion imagecolorallocate y almacenaremos su valor de retorno en una variable para pasarsela despus como color a las funciones de dibujo, coloreado... Nota: El primer color creado con imagecolorallocate ser utilizado como color de fondo de la imagen. Los parametros que pasaremos a la funcion sern la variable del objeto image y los valores de la intensidad en 24 bits ( de 0 a 255 ) de los colores rojo, verde y azul en este orden, veamos un ejemplo:
000 <?php 001 $color = imagecolorallocate($im, 255, 0, 0);

002 // 100% rojo, 0% verde, 0% azul 003 ?>

Obtencion de un color de la imagen


Otra opcin para crear un color consiste en obtener el color de un punto determinado de la imagen usando imagecolorat con el objeto imagen y las coordenadas del punto:
000 001 002 003 <?php $imagen = ImageCreateFromPng("manzana.png"); $color = ImageColorAt($imagen, 100, 200); // x: 100, y: 200 ?>

Utilizacin del color


Una vez creado el color con cualquier de los dos mtodos anteriores, y almacenado su valor ( variable imagen en los ejemplos ), podemos utilizarlo en las funciones que permiten colores pasando la variable, vamos a seguir los ejemplos anteriores:
000 001 002 003 <?php imagefill ( $imagen, 1, 1, $color ); // Usamos el cubo de pintura con el color creado en x=1 y=1 ?>

Dibujo de lneas con GD


En este tutorial de 3 pginas veremos cmo podemos dibujar todo tipo de lneas (normales, gruesas, discontinuas, punteadas... ) usando la librera GD de PHP.

Tabla de contenido

Dibujo de lineas bsicas Dibujo de lineas gruesas

Dibujo de lineas bsicas


Para dibujar una linea contnua de grosor 1 en una imagen creada con GD, usaremos la funcin imageline, que funciona de la siguiente manera:

000 imageline($im, $ax, $ay, $bx, $by, $col);

Donde los parmetros que pasamos a la funcin sern: $im - Es el identificado de la imagen que hemos creado cmo se explica en este artculo $ax - Es la coordenada horizontal del primer punto de la lnea $ay - Es la coordenada vertical del primer punto de la lnea $bx - Es la coordenada horizontal del segundo punto de la linea $by - Es la coordenada vertical del segundo punto de la lnea $col - Es el color de la linea como se explica tambin en este artculo Vamos a ver un ejemplo de lnea:
000 001 002 003 004 005 006 007 008 009 010 011 012 <?php $im = @imagecreate(100, 100) or die("Error creando la imagen"); $fondo = imagecolorallocate($im, 255, 255, 255); // blanco $linea = imagecolorallocate($im, 0, 0, 0); // negro // Dibujamos la lnea imageline($im, 10, 10, 90, 90, $linea); header("Content-type: image/png"); imagepng($im); imagedestroy($im); ?>

Y aqu tenemos su resultado:

Dibujo de lneas con GD


Tabla de contenido

Dibujo de lineas bsicas Dibujo de lineas gruesas

Dibujo de lineas gruesas


Para hacer una lnea de grosor distinto de 1, antes de dibujarla, usaremos la funcin imagesetthickness, que funciona de la siguiente manera:
000 imagesetthickness($im, $grosor);

Donde los parmetros que pasamos a la funcin sern:


000 001 [b]$im[/b] - Es el identificado de la imagen [b]$grosor[/b] - Es el grosor en pxels de la lnea

Vamos a ver un ejemplo de lnea de 10 pxels:


000 001 002 003 004 005 006 007 008 009 010 011 012 013 <?php $im = @imagecreate(100, 100) or die("Error creando la imagen"); $fondo = imagecolorallocate($im, 255, 255, 255); // blanco $linea = imagecolorallocate($im, 0, 0, 0); // negro // Cambiamos el grosor a 10 imagesetthickness($im, 10); imageline($im, 10, 10, 90, 90, $linea); header("Content-type: image/png"); imagepng($im); imagedestroy($im); ?>

Y aqu tenemos su resultado:

Finalmente, para volver a dibujar lneas normales, haremos un imagesetthickness con grosor

Dibujo de rectngulos con GD


Con GD, podemos dibujar rectngulos y rectngulos coloreados facilmente utilizando las funciones que explicaremos en este artculo.

Tabla de contenido

Dibujo de rectngulos Rectngulos coloreados

Dibujo de rectngulos
Para dibujar un rectngulo utilizaremos la funcin imagerectangle, pasndole las coordenadas del rectndulo y el color de la siguiente manera:
000 imagerectangle($im, $ax, $ay, $bx, $by, $col);
Maximizar Seleccionar CSS

Donde los parmetros que pasamos a la funcin sern: $im - Es el identificado de la imagen que hemos creado cmo se explica en este artculo $ax - Es la coordenada horizontal del primer punto del rectngulo $ay - Es la coordenada vertical del primer punto del rectngulo $bx - Es la coordenada horizontal del segundo punto del rectngulo $by - Es la coordenada vertical del segundo punto del rectngulo $col - Es el color de la linea como se explica tambin en este artculo De esta manera dibujaremos las cuatro lneas del rectngulo, donde el primer punto es el borde superior izquierdo y el sgundo el borde inferior derecho. A estas lneas tambin les podremos aplicar grosores y estilos de lnea.

Rectngulos coloreados
Otro tipo de rectngulo que podemos dibujar sn los rectngulos coloreados (areas de un color) que haremos con la funcin imagefilledrectangle, que funciona exactamente igual que la anterior pero genera un resultado distint

Dibujo de arcos y elipses con GD


Una elipse es una seccin cnica, una especie de huevo, y un caso particular de elipse es el crculo, por otra parte, un arco es una curva entre dos puntos (elipse no completa) El dibujo de elipses y arcos con GD, es muy parecido al dibujo de rectngulos, salvo que en lugar de indicar las esquinas del rectngulo, debemos indicar el centro , la altura, el ancho y en el caso de los arcos, el ngulo inicial y final.

Tabla de contenido

Dibujo de elipses y crculos Dibujo de arcos

Dibujo de elipses y crculos

Usando la funcin imageellipse o imagefilledellipse (para rellenarla de color), podemos generar una elipse de la siguiente manera:
000 imageellipse ($im, $cx, $cy, $an, $al, $col);
Maximizar Seleccionar CSS

Donde cada variable pasada a la funcin significa: $im - Es el identificado de la imagen que hemos creado cmo se explica en este artculo $cx - Coordenada horizontal del centro de la elipse $cy - Coordenada vertical del centro de la elipse $an - Ancho de la elipse $al - Altura de la elipse $col - Es el color de la linea (o relleno) como se explica tambin en este artculo Veamos un ejemplo de cmo generar un caso particular de elipse, un crculo de 100 x 100 pixels (centrado en 50,50):
000 001 002 003 004 005 006 007 008 009 010 011 012 <?php $im = @imagecreate(101, 101) or die("Error creando la imagen"); $fondo = imagecolorallocate($im, 255, 255, 255); // blanco $linea = imagecolorallocate($im, 0, 0, 0); // negro // Dibujamos la elipse imageellipse($im, 50, 50, 100, 100, $linea); header("Content-type: image/png"); imagepng($im); imagedestroy($im); ?>
Maximizar Seleccionar PHP

Y este ser el resultado (que sera relleno de color negro de haber usado imagefilledellipse):

Dibujo de arcos
Para dibujar un arco, usaremos la funcin imagearc o imagefilledarc, que tiene la misma sintaxis que la funcin anterior salvo que aade el ngulo inicial y el final:
000 imageellipse ($im, $cx, $cy, $an, $al, $in, $fi, $col);
Maximizar Seleccionar CSS

Donde cada variable pasada a la funcin significa:

$im - Es el identificado de la imagen que hemos creado cmo se explica en este artculo $cx - Coordenada horizontal del centro del arco $cy - Coordenada vertical del centro del arco $an - Ancho del arco $al - Altura del arco $in - ngulo inicial del arco $fi - ngulo final del arco $col - Es el color de la linea (o relleno) como se explica tambin en este artculo Veamos un ejemplo de cmo generar un arco:
000 001 002 003 004 005 006 007 008 009 010 011 012 <?php $im = @imagecreate(101, 101) or die("Error creando la imagen"); $fondo = imagecolorallocate($im, 255, 255, 255); // blanco $linea = imagecolorallocate($im, 0, 0, 0); // negro // Dibujamos el arco imagearc($im, 50, 50, 100, 100, 90, 180, $linea); header("Content-type: image/png"); imagepng($im); imagedestroy($im); ?>
Maximizar Seleccionar PHP

Y este ser el resultado (que sera relleno de color negro de haber usado imagefilledarc):

You might also like