Está en la página 1de 16

PHP Orientado a Objetos for Beginners II | Baluart.

NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

PORTADA Actualidad

VIDEOS

ETIQUETAS

CONTACTO Marketing Digital

Siguenos en: Diseo Grfico

Desarrollo Web

Tecnologa

Balu 27 Julio 2010 - 6:29am 1 comentario


2 Me gusta 1 Twittear 5

Continuamos con la segunda parte del artculo PHP Orientado a Objetos for Beginners (publicado hace unos das), pero ahora enfocados en las herramientas que nos ayudarn a desarrollar nuestras aplicaciones web con PHP OOP ms fcilmente. En este artculos vamos a conocer sobre los mtodos mgicos y observar como funcionan los constructores y destructores, como podemos convertir un objeto en un string y como usar las herencias. Y todo explicado de una manera sencilla y prctica... Importante: Si no tienes claro los conceptos de OOP con PHP, dirgete a la Parte 1 de este artculo. All comentamos los conceptos generales y hacemos una introduccin a la Programacin Orientada a Objetos con PHP.

Para facilitar el uso de objetos, PHP proporciona una serie de mtodos mgicos o mtodos especiales que son llamados cuando ciertas acciones comunes ocurren dentro de los objetos. Esto permite a los desarrolladores realizar una variedad

1 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

de tareas tiles con cierta facilidad. Importante: Los ejemplos que veremos son la continuacin de los ejemplos propuestos en la parte 1, acude a ellos si tienes alguna duda.

Cuando un objeto es instanciado, muchas veces es conveniente establecer algunas cosas. Por ello, PHP proporciona el mtodo mgico __construct(), que se llamar automticamente cada vez que un nuevo objeto es creado. Para ilustrar el concepto de constructores, vamos a aadir un constructor a MyClass que imprimir un mensaje cuando una nueva instancia de la clase sea creada: <?php class MyClass { public $prop1 = "Soy la propiedad de una clase!"; public function __construct() { echo 'La clase "', __CLASS__, '" fue iniciada!<br />'; } public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . "<br />"; } } // Crea un nuevo objeto $obj = new MyClass;

2 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

// Imprime el valor de $prop1 echo $obj->getProperty(); // Imprime un mensaje al final del archivo echo "Fin del archivo.<br />"; ?> Toma nota: __CLASS__ retorna el nombre de la clase que fue llamada; esto es conocido como una constante mgica. Hay una amplia gama de constantes mgicas disponibles, puedes leer un poco ms de ellas en el manual de PHP. Ahora recarga el archivo en tu navegador y vers el siguiente resultado: La clase "MyClass" fue iniciada! Soy la propiedad de una clase! Fin del archivo. Para llamar a una funcin cuando el objeto se destruye, podemos hacer uso del mtodo mgico __destruct(). Este es muy til para la limpieza de una clase (cerrar la conexin a una base de datos, por ejemplo). Continuando con nuestro ejemplo, imprimiremos un mensaje cuando el objeto es destruido. Para ello, definimos el mtodo __destruct() en MyClass: <?php class MyClass { public $prop1 = "Soy la propiedad de una clase!"; public function __construct() { echo 'La clase "', __CLASS__, '" fue iniciada!<br />'; } public function __destruct() { echo 'La clase "', __CLASS__, '" fue destruida!<br />';

3 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

} public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . "<br />"; } } // Crea un nuevo objeto $obj = new MyClass; // Imprime el valor de $prop1 echo $obj->getProperty(); // Imprime un mensaje al final del archivo echo "Fin del archivo.<br />"; ?> Con el destructor definido, recarga la pgina de ejemplo y deber aparecerte el siguiente resultado: La clase "MyClass" fue iniciada! Soy la propiedad de una clase! Fin del archivo. La clase "MyClass" fue destruida!

Para entender mejor como funciona el destructor, ahora destruye manualmente el objeto usando la funcin unset(): <?php class MyClass { public $prop1 = "Soy la propiedad de una

4 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

clase!"; public function __construct() { echo 'La clase "', __CLASS__, '" fue iniciada!<br />'; } public function __destruct() { echo 'La clase "', __CLASS__, '" fue destruida!<br />'; } public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . "<br />"; } } // Crea un nuevo objeto $obj = new MyClass; // Imprime el valor de $prop1 echo $obj->getProperty(); // Destruye el objeto unset($obj); // Imprime un mensaje al final del archivo echo "Fin del archivo.<br />"; ?> Ahora recarga la pgina y vers como el resultado ha cambiado: La clase "MyClass" fue iniciada! Soy la propiedad de una clase! La clase "MyClass" fue destruida!

5 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

Fin del archivo.

Para evitar que un error aparezca al intentar imprimir la instancia de MyClass como string ( cadena de texto), otro mtodo mgico es til: __toString(). Si no utilizamos __toString(), tratar de imprimir un objeto como cadena nos devolver un error fatal. Para demostrarlo, intenta imprimir el objeto con un echo, sin utilizar el mtodo mgico: <?php class MyClass { public $prop1 = "Soy la propiedad de una clase!"; public function __construct() { echo 'La clase "', __CLASS__, '" fue iniciada!<br />'; } public function __destruct() { echo 'La clase "', __CLASS__, '" fue destruida!<br />'; } public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . "<br />"; } } // Crea un nuevo objeto $obj = new MyClass;

6 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

// Imprime el objeto como un string echo $obj; // Destruye el objeto unset($obj); // Imprime un mensaje al final del archivo echo "Fin del archivo.<br />"; ?> Esto resulta en lo siguiente: La clase "MyClass" fue iniciada! Catchable fatal error: Object of class MyClass could not be converted to string in /Applications/XAMPP/xamppfiles/htdocs/testing /test.php on line 40 Para evitar este error, vamos a aadir el mtodo __toString(): <?php class MyClass { public $prop1 = "Soy la propiedad de una clase!"; public function __construct() { echo 'La clase "', __CLASS__, '" fue iniciada!<br />'; } public function __destruct() { echo 'La clase "', __CLASS__, '" fue destruida!<br />'; } public function __toString() { echo "Usando el mtodo toString: ";

7 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

return $this->getProperty(); } public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . "<br />"; } } // Crea un nuevo objeto $obj = new MyClass; // Imprime el objeto como un string echo $obj; // Destruye el objeto unset($obj); // Imprime un mensaje al final del archivo echo "Fin del archivo.<br />"; ?> En este caso, el intentar convertir el objeto en un string nos devuelve una llamada al mtodo getProperty(). Carga el script en un archivo y prubalo en el navegador. Vers que aparece lo siguiente: La clase "MyClass" fue iniciada! Usando el mtodo toString: Soy la propiedad de una clase! La clase "MyClass" fue destruida! Fin del archivo. Tip: Adicionalmente a los mtodos mgicos comentados en este artculo, existen ms de ellos. Para una revisin completa de los mtodos mgicos, puedes darle una mirada a esta pgina del manual de PHP.

8 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

Las clases pueden heredar los mtodos y propiedades de otras clases usando la palabra extends. Por ejemplo, para crear una segunda clase que extienda MyClass y aada un mtodo, podras aadir los siguiente a tu archivo de prueba: <?php class MyClass { public $prop1 = "Soy la propiedad de una clase!"; public function __construct() { echo 'La clase "', __CLASS__, '" fue iniciada!<br />'; } public function __destruct() { echo 'La clase "', __CLASS__, '" fue destruida!<br />'; } public function __toString() { echo "Usando el mtodo toString: "; return $this->getProperty(); } public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . "<br />"; } } class MyOtherClass extends MyClass

9 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

{ public function newMethod() { echo "Desde un nuevo mtodo en " . __CLASS__ . ".<br />"; } } // Crea un nuevo objeto $newobj = new MyOtherClass; // Imprime el objeto como un string echo $newobj->newMethod(); // Usa el mtodo de la clase padre echo $newobj->getProperty(); ?> Ahora, recarga el archivo en el navegador y te aparecer lo que sigue: La clase "MyClass" fue iniciada! Desde un nuevo mtodo en "MyOtherClass". Soy la propiedad de una clase! La clase "MyClass" fue destruida!

Para cambiar el comportamiento de una propiedad o mtodo en una nueva clase, simplemente podras sobrescribirlos, declarndolos otra vez en la nueva clase: <?php class MyClass { public $prop1 = "Soy la propiedad de una clase!"; public function __construct() { echo 'La clase "', __CLASS__, '" fue iniciada!<br />';

10 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

} public function __destruct() { echo 'La clase "', __CLASS__, '" fue destruida!<br />'; } public function __toString() { echo "Usando el mtodo toString: "; return $this->getProperty(); } public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . "<br />"; } } class MyOtherClass extends MyClass { public function __construct() { echo "Un nuevo constructor en " . __CLASS__ . ".<br />"; } public function newMethod() { echo "Desde un nuevo mtodo en " . __CLASS__ . ".<br />"; } } // Crea un nuevo objeto $newobj = new MyOtherClass;

11 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

// Imprime el objeto como un string echo $newobj->newMethod(); // Usa el mtodo de la clase padre echo $newobj->getProperty(); ?> Esto cambiar la salida en el navegador a: Un nuevo constructor en MyOtherClass. Desde un nuevo mtodo en MyOtherClass. Soy la propiedad de una clase! La clase "MyClass" fue destruida!

Para aadir una nueva funcionalidad a un mtodo heredado, pero queremos mantener intacto a este, vamos a usar la palabra parent con el operador de resolucin de mbito (::): <?php class MyClass { public $prop1 = "Soy la propiedad de una clase!"; public function __construct() { echo 'La clase "', __CLASS__, '" fue iniciada!<br />'; } public function __destruct() { echo 'La clase "', __CLASS__, '" fue destruida!<br />'; } public function __toString() {

12 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

echo "Usando el mtodo toString: "; return $this->getProperty(); } public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . "<br />"; } } class MyOtherClass extends MyClass { public function __construct() { parent::__construct(); // LLama al constructor de la clase padre echo "Un nuevo constructor en " . __CLASS__ . ".<br />"; } public function newMethod() { echo "Desde un nuevo mtodo en " . __CLASS__ . ".<br />"; } } // Crea un nuevo objeto $newobj = new MyOtherClass; // Imprime el objeto como un string echo $newobj->newMethod(); // Usa el mtodo de la clase padre echo $newobj->getProperty(); ?> Esto muestra el resultado de ambos: Del constructor de la clase

13 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

padre y del constructor de la nueva clase: La clase "MyClass" fue iniciada! Un nuevo constructor en MyOtherClass. Desde un nuevo mtodo en MyOtherClass. Soy la propiedad de una clase! La clase "MyClass" fue destruida! En este artculo hemos visto, rpida y claramente, cmo funcionan los mtodos mgicos en OOP y lo prctico que pueden sernos, cmo usar los constructores y destructores y un mtodo que nos ser muy til para imprimir nuestros objetos. Tambin hemos comprendido el concepto de herencias y de que maneras podemos aplicarla. An quedan temas introductorios a la POO con PHP por comentar, pero los dejamos pendientes para un prximo post. Este artculo contina en: PHP Orientado a Objetos for Beginners III Fuente: Este tutorial es un extracto del libro Pro PHP and jQuery, en ingls: Object-Oriented PHP for Beginners.

Si te gust este artculo tambin te gustar...


Zend Framework desde cero 25/11/2011 - 1:46pm

Yioop, un buscador con PHP Open Source 29/08/2011 - 11:18am

Traits, lo nuevo de PHP 5.4 18/07/2011 - 2:14pm

14 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

TUTORIALES

ARTCULO RECOMENDADO

CATEGORAS Actualidad Cultura Desarrollo Web Diseo Grfico Entretenimiento General Marketing Tecnologa

RECOMENDAMOS Slo Photoshop ZonaMasters GossipSphere Almadark Weblog Jhonnyt Weblog Medicina Natural

Cmo cambiar el men de arranque de Windows 8 a Windows 7 con un clic


Muchos de los que ya tienen Windows 8 (Ver: Cmo actualizar a...

Cmo actualizar a Windows 8 de forma sencilla


El jueves fue el lanzamiento oficial de Windows 8 y para todos...

Cmo cambiar el men de arranque de Windows 8 a Windows 7 con un clic


Muchos de los que ya tienen Windows 8 (Ver: Cmo actualizar a Windows 8 de forma sencilla), estn disfrutando de todas las novedades que nos trae lo ms nuevo de Microsoft. Uno de los mayores cambios, el nuevo Men... ms

15 de 16

10/11/2012 11:10 a.m.

PHP Orientado a Objetos for Beginners II | Baluart.NET

http://www.baluart.net/articulo/php-orientado-a-objetos-for-beginners-ii

Cmo usar ems en vez de pixeles para la tipografa de nuestro diseo web
En aos pasados, los diseadores de pginas web utilizaban...

Weblog

Videos

Categoras

En Ingls

Privacy policy

Contacto

Copyright 2005 - 2012 - Baluart.NET. Todos los derechos compartidos. Creative Commons.

16 de 16

10/11/2012 11:10 a.m.

También podría gustarte