Está en la página 1de 8

Memorias de un aprendiz de PHP

http://www.rinconastur.com/php/php87.php

Clases y objetos
Aunque PHP 5 no es un lenguaje orientado a objetos, s tiene recursos que permiten definir clases y construir objetos. El modelo de objetos de PHP 5 ha sido reescrito en su prctica totalidad y presenta sustanciales diferencias respecto a las versiones anteriores. El uso de clases y objetos (POO Programacin Orientada a Objetos) no aade ninguna funcionalidad nueva a las posibilidades de PHP. Su verdadera utilidad es la de hacer la programacin de otra manera, con un cdigo ms legible y reutilizable.

Las clases
Una clase no es otra cosa que una especie de plantilla dentro de la cual se pueden definir una serie de variables llamadas propiedades que pueden contener valores predefinidos y un conjunto de funciones denominadas mtodos que pueden ser invocadas desde cualquier parte del documento por un objeto o instancia de esa clase. La sintaxis que permite definir una clase es siguiente: class nombre { .... ... definicin de variables y/o propiedades.... .... .. constructor (opcional)... .... .. destructor (opcional)... .... .. definicin de mtodos o funciones ... .... } Vayamos por partes. La palabra reservada class es obligatoria y ha de ir seguida de un nombre mediante el que ser identificada la clase. La definicin de la clase comienza con un llave de apertura ({) y acaba con una llave de cierre (}). Entre ambas llaves podemos incluir sus variables o propiedades y tambin sus mtodos o funciones. A las variables o propiedades pueden serles asignados valores, aunque no es imprescindible hacerlo. Los mtodos o funciones tienen una sintaxis muy similar a la utilizada en la programacin estructurada. Entre los mtodos o funciones susceptibles de ser incluidos en una clase existen dos bastante especiales. Son los llamados constructor y destructor. Ninguno de ellos tiene carcter obligatorio. Su peculiaridad estriba en que se ejecutan de forma automtica en determinadas circunstancias. Hablaremos de ellas un poco ms adelante.

Definicin de las propiedades


Para definir una variable o propiedad en una clase es obligatorio anteponer a su nombre una de estas tres palabras reservadas: public, private o protected. Por compabilidad con versiones anteriores de PHP si se usa la palabra var ser interpretada como un alias de public. El nombre de la variable utiliza la sintaxis habitual de PHP y en el caso de que tratemos de asignarle un valor, bastar con poner detrs del nombre el signo = seguido de ese valor que en el caso de ser una cadena tienen que ir entre comillas. A modo de ejemplo podemos decir que public $pepe="Jose" es una sintaxis vlida, pero que $pepe="Jose" no lo es dado que le falta la palabra reservada (opcin de visibilidad) que obligatoriamente debe llevar delante de su nombre y que de no ser incluida provocara un error. Lo que se conoce como encapsulamiento es uno de los pilares bsicos de la Programacin Orientada a Objetos. Permite establecer las condiciones y/o restricciones de visibilidad de los diferentes elementos (propiedades y mtodos) de una clase. Cuando al definir una variable o propiedad anteponemos a su nombre la palabra public estamos estableciendo ese carcter pblico de visibilidad que significa que sus valores pueden ser vistos e incluso modificados desde cualquier parte del script en que sean invocadas. Por el contrario, si establecemos la visibilidad como private (privada) estamos encapsulando la informacin de forma que sus valores slo son accesibles a travs de mtodos o propiedades incluidos en la propia clase. La tercera de las posibilidades, protected (protegida), flexibiliza un poco la condicin private al permitir que el mtodo o propiedad sea ser visible desde la propia clase y desde sus clases extendidas (las trataremos un poco ms adelante cuando nos refiramos a la herencia).

Funciones o mtodos de clase


Los mtodos o funciones definidas en las clases que tienen una sintaxis casi idntica al resto de las funciones PHP function nombre( ){ ... instrucciones.... .... } Las diferencias ms sustanciales respecto a las funciones de la programacin estructurada son: Los mtodos siguen los mismos criterios de encapsulamiento que hemos comentado al hablar de las propiedades. Se establecen

1 de 8

12/11/2012 11:48 a.m.

Memorias de un aprendiz de PHP

http://www.rinconastur.com/php/php87.php

anteponiendo a la palabra function una de las tres palabras public, private o protected aunque en este caso si se omite no se genera error sino que el mtodo es considerado como public. Siempre que desde un mtodo se invoque una variable o propiedad definida en la misma clase ha de hacerse mediante la sintaxis: $this ->propiedad. Los mtodos de la propia clase se invocan de esta forma: $this->nombre_de_la_funcion(). Como es lgico dentro del parntesis pueden incluirse los parmetros o argumentos que sean necesarios. Prestemos mucha atencin. El $ va siempre delante de la palabra this y solo se escribe una vez y en esa posicin. El nombre de la variable (que va siempre despus de -> no lleva el $. Este es un ejemplo de una clase muy sencilla. Como ves el nombre de la clase es MiClase. Como es lgico, si tratas de ejecutar el ejemplo no obtendrs ningn resultado. Ser necesario que un objeto utilice esta clase. <?php class MiClase{ public $factor1=7; // esta es pblica private $factor2=8; // variable privada protected $factor3=3; // variable protegida function calcula($a=3,$b=5){ // al no indicar visibilidad ser public return $this->factor1-$b^2+$this->factor2*$a-$this->factor3; } } ?>

ejemplo299.php

Los objetos
Las clases son solo plantillas y sus mtodos no sern ejecutados en tanto no exista un objeto que requiera su aplicacin. Dicho en forma coloquial, una clase es como una sartn. En tanto no tengamos algo que freir carece de utilidad alguna. Su razn de ser son los objetos susceptibles de se cocinados por ella. Lo mismo ocurre con las clases cuya autntica razn de ser es servir para la creacin y manejo de sus objetos.

Creacin y destruccin de objetos


Para crear un nuevo objeto (instancia de la clase) que utilice una clase determinada debemos usar la siguiente sintaxis: $objeto = new clase donde objeto es una palabra cualquiera con la que identificar el objeto (como si se tratara de una variable), new es una palabra reservada obligatoria y clase es el nombre de una clase que puede estar escrita en el mismo documento o en un fichero externo. Si la clase est escrita en un documento distinto del que contiene el script que crea el objeto habremos de utilizar include o require para incluirla. Cuidado! Fjate que por el momento no hemos puesto los () requeridos para invocar las funcionesdetrs del nombre de la clase. Cuando se trata de eliminar un objeto (liberar el rea de memoria que contiene toda la informacin relativa a este) podemos utilizar la siguiente sintaxis: $objeto = null o unset(objeto ) si bien es cierto que se destruyen de forma automtica una vez termina la ejecucin del script que los crea y utiliza.

Utilizacin de los objetos


Una vez creado un objeto ya se podrn utilizar (si su visibilidad lo permite) y modificar sus propiedades y tambin las funciones o mtodos de su clase . Los mtodos se invocan mediante la siguiente sintaxis: $objeto->funcion() o $objeto->funcion(p,q) o $objeto->funcion(p) dnde $objeto es el objeto creado en la instruccin anterior, el -> es obligatorio, funcion es el nombre de uno de los mtodos o funciones definidos en la clase invocada y donde los () son obligatorios y adems como ocurra en las dems funciones PHP puede contener valores, variables, etctera separadas por comas. Las propiedades (siempre que su visibilidad lo permita) son accesibles mediante: $objeto->propiedad o $objeto->propiedad=valor En el primer caso estaramos leyendo el valor de esa propiedad y en el segundo le estaramos asignando el incluido despus del signo igual.

2 de 8

12/11/2012 11:48 a.m.

Memorias de un aprendiz de PHP

http://www.rinconastur.com/php/php87.php

<?php /* incluimos el fichero que contiene la clase que pretendemos utilizar */ include('ejemplo299.php'); /* creamos un objeto utilizando el nombre exacto de la clase*/ $MiObjeto1=new MiClase; //no lleva parntesis /* leeremos los valores de las propiedades */ print "<br />Valor por defecto de la propiedad factor1: "; /* solo podremos leer desde aqu la propiedad publica factor1 Las propiedades privadas y protegidas solo son accesibles desde la propia clase y aqu estamos haciendo desde uno objeto que la instancia */ print $MiObjeto1->factor1; print "<br />Aplicacin del mtodo calcula "; print "<br />No pasamos argumentos. Por tanto calcula con 'a'=3 y 'b'=5: "; print $MiObjeto1->calcula(); print "<br />Pasamos 15 como argumento por tanto calcula con 'a'=15 y 'b'=5: "; print $MiObjeto1->calcula(15); print "<br />Pasamos 125 y -98 como argumentos por tanto calcula con 'a'=125 y 'b'=98: "; print $MiObjeto1->calcula(125,-98); /* solo podemos modificar desde aqu la propiedad factor1. Las otras dos por su carcter privado y restringido solo podran ser modificadas desde dentro de la propia clase o de una clase extendida */ print "<br />Modificamos el valor de la propiedad factor1: "; $MiObjeto1->factor1=196; print$MiObjeto1->factor1; print "<br />Clculo con los nuevos valores por defecto: "; print $MiObjeto1->calcula(); print "<br />Clculo con nuevos valores por defecto pero asignando a 'a' el valor 25: "; print $MiObjeto1->calcula(25); print "<br />Clculo con nuevos valores por defecto con 'a'=15 y 'b'=-8: "; print$MiObjeto1->calcula(15,-8); /* creamos un nuevo objeto y comprobamos que la modificacin de la propiedad factor1 no afectar al nuevo objeto (la modificacin se hizo en el objeto anterior no en la clase) */ $MiObjeto2=new MiClase; print "<br />Clculo con valores por defecto del nuevo objeto: "; print $MiObjeto2->calcula(); print "<br />Clculo con valores por defecto del objeto anterior: "; print $MiObjeto1->calcula(); /* destruimos el primero de los objetos aunque no sea necesario hacerlo. Al finalizar el script se destruira de forma automtica */ $MiObjeto1=null; ?>

ejemplo300.php

En este otro ejemplo trataremos de ver el comportamiento de los mtodos y propiedades de carcter no pblico. <?php /* crearemos una clase con los diferentes tipos de variables y mtodos */ class Coche{ /* las propiedades han de tener especificada su visibilidad */ public $potencia="135 C.V."; public $tipo_iva="33"; private $precio="24535 euros"; protected $modelo="HF345"; /* un mtodo publico ya que no especificamos visibilidad */ function precio_final(){ return (int)($this->precio)*(1+$this->tipo_iva/100); } /* un mtodo privado al que solo podremos acceder desde la propia clase*/ private function precio_amigo($descuento=15){ return $this->precio_final()*(1-$descuento/100); } /* un metodo publico que nos lleva a otro privado. La funcion siguiente es accesible por su condicin de pblica. Ella puede acceder a las funciones privadas de la propia clase. Asi que le pedimos que "se cuele" por "la puerta trasera" en el mtodo precio_amigo y nos devuelva el resultado */ function puerta_trasera($porcentaje){ return $this->precio_amigo($porcentaje); } /* un metodo publico que accede a una propiedad privada. No podemos cambiar precios directamente porque estn en una variable privada. Pero esta funcin pblica si tiene acceso a cualquier propiedad o mtodo de su clase. La utilizamos para cambiar el precio */ function cambia_precios($precio){ $this->precio=$precio; } } /*Hasta aqu la clase. Ahora toca instanciar objetos de la clase Coche */ $MiNuevoCoche= new Coche; /* visualizamos sus propiedades publicas */ print "<br>La potencia es: ".$MiNuevoCoche->potencia; print "<br>El tipo de IVA es: ".$MiNuevoCoche->tipo_iva; print "<br>No puedo conocer el modelo. Es una propiedad absurdamente protegida"; print "<br>Tampoco puedo acceder al precio. Es una propiedad privada"; print "<br>Cambio el precio: a 100 euros";

3 de 8

12/11/2012 11:48 a.m.

Memorias de un aprendiz de PHP

http://www.rinconastur.com/php/php87.php

$MiNuevoCoche->cambia_precios('100 euros'); print "<br>Compruebo el precio final: ".$MiNuevoCoche->precio_final(); print "<br>El precio de amigo (25% descuento)es: ".$MiNuevoCoche->puerta_trasera(25); /* instanciemos un nuevo objeto. Al nuevo cliente no le afectarn las modificaciones anteriores */ $TuNuevoCoche= new Coche; print "<br>Para el nuevo objeto el precio final: ".$TuNuevoCoche->precio_final(); ?>

ejemplo298.php

Constructores y destructores
Un constructor es una funcin que se ejecuta de forma automtica cada vez que se instancia un nuevo objeto. Para que PHP considere a una funcin como tal ha de estar definida en la propia clase y adems debe tener por nombre la palabra reservada __construct que tal como puedes ver comienza por dos guiones bajos. Cuando est definido, el constructor la instancia del nuevo objeto puede hacerse de una de estas formas: $objeto=new nombre_clase; No difiere en nada de la comentada anteriormente. El constructor usuar como valores de las variables que necesite utilizar los definidos en la propia funcin __construct y/o los valores de la propiedades establecidas en la propia clase. $objeto=new nombre_clase (valor1, valor2, ...) En este caso se incluyen, dentro del parntesis, los valores que deben asignarse a una o varias de las variables que requieran ser utilizadas por la funcin __construct. Cuando se le pasan valores la funcin se ejecuta sin tomar en consideracin los asignados por defecto y cuando se le pasan slo parte de esos valores utiliza los valores recibidos y para los no asignados en la llamada utiliza los valores del constructor. Un destructor es tambin una funcin que se ejecuta de forma automtica cada vez que se destruye objeto. Esa funcin ha de estar definida en la propia clase con el nombre __destruct (tambin comienza por dos guiones bajos). Hemos de tener en cuenta que esta funcin no destruye el objeto. Simplemente se ejecuta cuando se produce esa destruccin. Podramos decir que es algo as como un timbre de alarma. El timbre no provoca el incendio. Lo nico que hace es sonar cuando se produce uno. Los objetos van a dejar de ser necesarios cuando se finalice la ejecucin de un script. Al llegar a ese punto ser cuando, de forma autmatica, se libere la memoria usada para contenerlos y como consecuencia de ello se destruyan. Al producirse ese evento (liberacin de memoria) ser cuando se ejecute la secuencia de instrucciones contenidas en la funcin __destruct. Tambin podramos destruir un objeto en cualquier punto del proceso por medio de $objeto= null o unset($objeto) tal como ya hemos comentado. El objeto $objeto sera eliminado de la memoria y como consecuencia de esa destruccin se ejecutara de forma automtica la funcin __destruct. Aqu tienes un ejemplo de una clase que incluye un constructor y un destructor. <?php class Operador1{ public $factor1=7; // esta es pblica private $factor2=8; // variable privada protected $factor3=3; // variable protegida function __construct($a=0,$b=0){ print "El constructor de MiObjeto".$a." ha fabricado esta fecha: "; print date("j-n-Y",(time()+($this->factor1+$b)*24*3600)); print "<br />"; } function opera($a=3,$b=46){ return $this->factor1-$b^2+$this->factor2*$a-$this->factor3; } function __destruct(){ print "O se acaba de destruir un objeto o me han llamado (soy __destruct)<br />"; } } ?>

ejemplo301.php

Si intentas ejecutar el ejemplo anterior no obtendrs ningn resultado. Slo es una clase. En este otro ejemplo instanciaremos esa clase y crearemos algunos objetos para tratar de comprobar el funcionamiento del constructor y el destructor. <?php /* incluimos el fichero que contiene la clase que pretendemos utilizar */ include('ejemplo301.php'); /* creamos vaios objeto utilizando la clase que acabamos de incluir*/ $MiObjeto0=new Operador1; //no lleva parntesis y no incluye ningun valor $MiObjeto1=new Operador1(1); //solo lleva el primero de los parmetros del constructor $MiObjeto2=new Operador1(2,8); //incluye dos parmetros $MiObjeto3=new Operador1(3,98); /* llamo a la funcin destruct que pese a su nombre no destruye nada. Se llama as porque se ejecuta automticamente cuando un objeto deja de estar referenciado por una variable y se autodestruye. */ $MiObjeto0->__destruct(); print "El destructor no destruy. El objeto mantiene sus propiedades Este es factor 1: ";

4 de 8

12/11/2012 11:48 a.m.

Memorias de un aprendiz de PHP

http://www.rinconastur.com/php/php87.php

print $MiObjeto0->factor1."<br />"; print " Clculos en MiObjeto1. Empezamos por valores por defecto: "; print $MiObjeto1->opera(); print "<br />Clculo con valores por defecto pero asignando a 'a' el valor 25: "; print$MiObjeto1->opera(25); print "<br />Clculo con 'a'=15 y 'b'=-8: "; print$MiObjeto1->opera(15,-8); print "<br />Modificamos el valor de la propiedad factor1 en el objeto 1: "; $MiObjeto1->factor1=196; /* vamos a destruir MiObjeto2 y comprobaremos como al hacerlo se dispara automaticamente la funcion __destruct */ print "<br>Me van a borrar ahora mismo: "; $MiObjeto2 = null; print $MiObjeto1->factor1; print "<br />Clculo con los nuevos valores por defecto: "; print $MiObjeto1->opera(); print "<br />Clculo en MiObjeto3 pero asignando a 'a' el valor 25 al objeto 3: "; print $MiObjeto3->opera(25); print "<br />Clculo con nuevos valores por defecto con 'a'=15 y 'b'=-8 al objeto 4: "; print $MiObjeto3->opera(15,-8); print "<br />Vamos a acabar el script. Lo objetos se autodestruirn y aparecern los mensajes alusivos a eso.<br />"; print "Quedan tres objetos y tres autodestrucciones. Cada una de ellas disparar la funcin __destruct<br />"; ?>

ejemplo302.php

Clases extendidas y clases finales


La herencia es otra de las razones de ser de la Programacin Orientada a Objetos. En PHP tambin tenemos la posibilidad de crear clases extendidas o clases derivadas de una clase padre . Su caracterstica ms importante es que pueden heredar todas las propiedades y mtodos de esta y, adems, tienen la posibilidad de agregar otros nuevos y/o modificar o redefinir los heredados (polimorfismo).

Sintaxis de las clases extendidas


Para definir una clase clases extendida se requiere la siguiente sintaxis: class hija extends padre { .... ... definicin o redefinicin de variables (opcional).... .... .. constructores (opcional)... .... .. definicin o redefinicin de funciones (opcional)... .... } dnde hija es el nombre de la nueva clase (la extendida), padre es el nombre de la clase padre y extends es la palabra reservada que indica a PHP que se trata de una clase extendida. Se puede impedir que una clase pueda extenderse. Para ello basta con anteponer a la palabra class la palabra final. Si escribimos: final class nieta extends hija {.....} estaremos imposibilitando que puedan definirse clases extendidas de la clase nieta. Las restricciones de PHP 5 en lo relacionado con las herencias son las que puedes ver en este grfico:

5 de 8

12/11/2012 11:48 a.m.

Memorias de un aprendiz de PHP

http://www.rinconastur.com/php/php87.php

Este es un ejemplo de clase extendida de una de las anteriores. Si intentas ejecutar el script te dar un mensaje de error advirtiendo de que no encuentra la clase padre. En este caso es irrelevante dado que el documento solo tiene la finalidad de escribir la clase extendida. <?php /* esta clase no podra ser extendida y es hija de la llamada Operador1. Heredar de ella sus mtodos y sus propiedades. Podr modificarlos y tambin incluir los propios */ final class Operador2 extends Operador1{ /* modificamos esta propiedad cambiando su valor */ public $factor1=297; // esta es pblica /* aadimos una nueva propiedad */ public $factor4=-67; /* Este es el constructor de la clase extendida. Sustituira al de la clase padre */ function __construct(){ print "Soy el constructor extendido y punto.<br>"; } /* redefinimos la funcin opera. Dar otros resultados */ function opera($a=3,$b=46){ /* utilizaremos solo factor1 y factor3 porque son los nicos visibles desde esta clase. factor1 por su condicin de pblico y factor3 porque su condicin de protegido le hace tambin visible desde la clase extendida */ return $this->factor1-$a^2+$this->factor3*$b+$this->factor3; } /* omitimos la funcin __destruct pero podremos usar la definida en la clase padre */ function nueva(){ print "Soy el resultado de una nueva funcin. <br />"; } } ?>

ejemplo303.php

Aqu tienes un ejemplo de utilizacin de algunas de las posibilidades de la clase extendida anterior. Ahora ya incluimos ambas clases (padre y extendida) y no tendremos mensajes de error al ejecutar el script. <?php /* hemos de incluir los ficheros que contienen ambas clases */ include('ejemplo301.php'); include('ejemplo303.php'); /* crearemos un objeto instanciando la clase padre y otro instanciando la extendida*/ $Objeto_de_clase_padre=new Operador1; /* este primer objeto no va a tomar en cuenta nada de lo contenido en la clase extendida*/ $Objeto_de_clase_extendida=new Operador2; /*este segundo objeto ya va a utilizar el constructor de la clase extendida. Al ejecutar el script podrn verse las diferencias */ print "<br>Este el valor del factor1 en el objeto creado a partir de la clase padre: "; print $Objeto_de_clase_padre->factor1; print "<br>Este el valor del factor1 en el objeto creado a partir de la clase extendida: "; print $Objeto_de_clase_extendida->factor1; /* la funcin (mtodo) nueva solamente puede ser usada en objetos creados mediante la clase extendida ya que para la clase padre no est definida. */ print "<br>Soy el resultado de la funcion nueva() aplicada al objeto de la clase extendida: "; $Objeto_de_clase_extendida->nueva(); /* la funcin (mtodo) opera es distinta segn el objeto pertenezca a una u otra clase. */ print "<br>Soy el resultado de la funcion opera() aplicada al objeto de la clase padre: "; print $Objeto_de_clase_padre->opera(); print "<br>Soy el resultado de la funcion opera() aplicada al objeto de la clase extendida: ";

6 de 8

12/11/2012 11:48 a.m.

Memorias de un aprendiz de PHP

http://www.rinconastur.com/php/php87.php

print $Objeto_de_clase_extendida->opera(); print "<br>Esta es la ltima instruccin del script. Lo que leas de aqu en adelante "; print "ser obra de los destructores que se activarn al destruirse los dos objetos<br>"; ?>

ejemplo304.php

Bibliotecas de clases
Una de las ventajas ms importantes de las clases es la posibilidad de reutilizacin de sus scripts tanto si se trata de rutinas propias o de desarrollos de terceros. Bastara con disponer del fichero que contiene la clase correspondiente conocer sus mtodos pblicos (los nicos accesibles de la forma que lo hemos hecho en los ejemplos anteriores) y utilizarlos con la sintaxis que hemos venido usando en los ejemplos anteriores. Existen algunos sitios en la red en los que pueden obtener una gran cantidad de materiales de este tipo. Uno de los ms populares puedes encontrarlo en la direccin: phpclasses.org. Adems existen otros sitios dnde se pueden obtener algunas clases muy interesantes. Cuando tratemos lo relativo a ficheros en formato PDF veremos el enorme abanico de posibilidades que nos ofrece la clase TCPDF. Por el momento, para intentar ilustrar un poco la utilizacin de clases de terceros, incluimos un ejemplo que permite el envo de mensajes de correo con ficheros adjuntos (similares a los que hemos podido ver al tratar el tema de mensajes de correo) utilizando la clase phpmailer. Pese a que el enlace de descarga incluye abundante material y documentacin solo hemos extraido de l los dos ficheros que necesitamos para el ejemplo: class.phpmailer.php y class.smtp.php que podemos utilizar de la siguiente forma: <?php /* evito con esta opcin init_set evitamos queaparezca un mensaje de advertencia relativo a una funcin utilizada en la clase y que est deprecated */ ini_set('display_errors','Off'); /* incluimos el fichero que contiene la clase llamada PHPMailer */ require("class.phpmailer.php"); /* creamos un nuevo objeto (mi_mensaje) instanciando la clase PHPMailer*/ $mi_mensaje = new PHPMailer(); $mi_mensaje->IsSMTP(); // este metodo publico especifica el tipo de servidor a utilizar (SMTP) /* asignamos valores a una serie de propiedades (variables) de la clase */ $mi_mensaje->Host = "127.0.0.1"; //modificamos la propiedad Host asignandole la IP del servidor $mi_mensaje->From = "juan@mispruebas.as"; // Correo del remitente asignado a al propiedad From $mi_mensaje->FromName = "Juan Mis Pruebas"; // nombre del remitente a la propiedad FromName $mi_mensaje->AddAddress("perico@mispruebas.as", "Perico Mis Pruebas"); // un destinatario $mi_mensaje->AddAddress("andres@mispruebas.as"); // otro destinatario el nombre es opcional $mi_mensaje->AddReplyTo("juan@mispruebas.as", "Juan Mis Pruebas"); //direccin de respuesta $mi_mensaje->WordWrap = 50; // longitud de la lnea del mensaje $mi_mensaje->Subject = "Prueba con adjuntos usando la clase phpmailer"; //Asunto $mi_mensaje->Body = "Este es un mensaje de prueba con ficheros adjuntos que usa la clase phpmailer"; //cuerpo $mi_mensaje->AltBody = "Este es un mensaje de prueba con ficheros adjuntos que usa la clase phpmailer"; //cuerpo cuando no utiliza HTML /* aplicamos al objeto los mtodos (funciones) de la clase necesarios para nuestro propsito */ $mi_mensaje->IsHTML(true); // enviar mensaje con formato html $mi_mensaje->AddAttachment("apachito.zip"); // aadir adjunto $mi_mensaje->AddAttachment("casa08.jpg", "leocadio.jpg"); // adjunto con nombre /* aplicamos al objeto el mtodo Send y comprobamos si tod se ha realizado correctamente */ if(!$mi_mensaje->Send()){ echo "El mensaje no ha podido enviarse. <br />"; echo "Error al enviar el mensaje: " . $mi_mensaje->ErrorInfo; exit; }else{ echo "El mensaje ha sido enviado"; } ?>

Cuidado! No olvides que para ejecutar este script es imprescindible que tengas activo tu servidor de correo.

Como habrs podido ver, la nica dificultad que nos plantea el uso de esta clase es conocer los mtodos y propiedades que incluye y la utilidad de los mismos. Ese tipo de informacin suele venir incluida como comentarios dentro de la propia clase y/o en la documentacin relativa a la misma.

Uso de la clase phpmailer mediante el SMTP de gmail


Para enviar mensajes de correo externos utilizando el SMTP de Gmail slo es necesario disponer de una cuenta de usuario en Gmail y agregar o sustituir en el script del ejemplo anterior lo siguiente: $mi_mensaje->Host = 'ssl://smtp.gmail.com'; $mi_mensaje->Port = 465; $mi_mensaje->SMTPAuth = true; $mi_mensaje->Username = 'direccion_completa_de_la_cuenta_de_gmail';

7 de 8

12/11/2012 11:48 a.m.

Memorias de un aprendiz de PHP

http://www.rinconastur.com/php/php87.php

$mi_mensaje->Password = 'contrasea_de_la_cuenta_de_gmail'; $mi_mensaje->From = 'direccion_completa_de_la_cuenta_de_gmail'; Como es obvio, adems de tener en marcha el servidor Apache en modo local es preciso que nuestro equipo disponga de acceso a Internet.
Ir a la pgina anterior Avisos de error y/o sugerencias Ir a la pgina ndice Ir a la pgina siguiente

8 de 8

12/11/2012 11:48 a.m.