Constructores Y Destructores En La Programación Orientada A Objetos

Constructores y destructores en la programación orientada a objetos

Que pasa churritas!

En artículos anteriores vimos los conceptos básicos de la programación orientada a objetos junto a la definición ampliada de las propiedades y constantes de clases. Si te has leído estos artículos ya deberías saber cómo hacer una clase y cómo utilizar la visibilidad de sus miembros para acceder a sus métodos y propiedades.

Pues bien, en este artículo vamos a hablar de los constructores y los destructores, esos mecanismos de construcción y destrucción de objetos que internamente sirven para reservar y liberar espacio en la memoria de nuestra máquina. Comenzamos.

Constructores y destructores

¿Tienen un nombre importante verdad? Constructores y destructores, wow, parecen métodos importantes y no son para menos porque son super importantes. Cuando creamos un objeto internamente estamos reservando un espacio de memoria que después utilizaremos asignando valores y leyendo de ella aunque este proceso sea transparente al programador y al usuario. El propio núcleo se encarga de hacerlo por lo que si decidimos trabajar con un lenguaje de programación de alto nivel como PHP es una preocupación menos que tener en cuenta.

Para definir el constructor de una clase utilizaremos el método mágico __construct() y tradicionalmente lo utilizaremos para inicializar ciertos valores necesarios de nuestra clase. El método constructor de una clase es el primer método que se ejecuta cuando instanciamos un nuevo objeto. Es el proceso que se va a encargar de crearnos el objeto, ¿bastante obvio según su nombre no?

Ahora bien, has de saber que como método mágico que es no es necesario ni obligatorio que lo declaremos en nuestras clases. Si volvemos al ejemplo de la clase de Gorkamu.class.php no verás en ella ningún constructor y esto es porque se utiliza el constructor por defecto. El propio núcleo de PHP cuando compile nuestra clase ya va a saber que tiene que llamarlo sin que nosotros tengamos que indicárselo.

La única razón que tenemos para declarar un método constructor en nuestra clase es para inicializar variables y esto es una buena práctica que tiene que ver con la encapsulación y la visibilidad, me explico. Dónde en ejemplos anteriores habíamos asignado valores directamente en la declaración de las propiedades, lo correcto sería asignar esos valores en el constructor de la clase.

Por otro lado, si nuestra clase hereda de otra, no tenemos porqué definir ningún constructor a no ser que tengamos que hacer algo específico. Cuando nuestras clases estén compiladas, el flujo de ejecución primero ejecutará el método constructor de la clase padre si lo hubiera y sino su constructor por defecto para después hacer una llamada al constructor de la clase hija, ya sea uno declarado o el método por defecto.

Esto es así aquí y en la China.

Aunque si en nuestra clase hija queremos hacer una llamada al constructor de la clase padre tendremos que hacerlo mediante las palabras reservadas parent::__contruct()

La ventaja que tienen los constructores y su sobrescritura es que si al constructor hijo le pasamos mas parámetros (o menos) de los que tiene el constructor padre PHP se callará como una puta y no nos dará ningún error a nivel de E_STRICT.

El método destructor

Por desgracia no me estoy refiriendo al arma letal de la estrella de la muerte. El método destructor es el proceso que utiliza el núcleo de nuestro lenguaje de programación para liberar espacio en memoria. Cuando un objeto queda obsoleto y ya no quedan referencias al objeto se ejecutará este método.

Típicamente los utilizamos para terminar con procesos de nuestro programa, por ejemplo podríamos poner la clausura de una conexión a base de datos aquí o hacer que escriba en un log que la clase ha sido destruida para llevar un control de qué esta pasando. No sé…

Al igual que con los métodos constructores y la herencia, con los métodos destructores pasa igual ya que si queremos hacer una llamada al método padre tendremos que hacerlo con las palabras reservadas parent::__destruct()

Esto es interesante ya que si ejecutamos el método exit() los destructores serán invocados pero sin embargo hacemos una llamada a exit() dentro de un método destructor muy posiblemente la estaremos cagando ya que estaremos dejando de ejecutar el resto de rutinas de finalización que queden, así que cuidadín.

Las dos últimas cosas que tienes que tener en cuenta con los destructores es que los métodos destructores invocados durante la finalización de un script ya han enviado las cabeceras HTTP, lo veremos mas adelante, así que no nos tenemos que preocupar de ello y por otro lado, si por algún caso vas a lanzar una excepción desde un destructor que sepas que te va a dar un error fatal. No se me ocurre una razón para hacer esto ya que existen otros mecanismos para hacerlo pero oye…

 

Pues nada chachos, ya sabéis como construir y destruir objetos y aunque no los utilicéis por lo menos conocéis los procesos internos que se llevan a cabo. Se que el tema es duro y espeso así que si tienes dudas déjamelas en los comentarios o en twitter a través del siguiente banner 😉

@gorkakatua #faqsGorkamu pregúntame por twitter cualquier cosa y vemos cómo lo solucionamos.

Hala a mamarla!

¿Te ha parecido este un artículo de 5 estrellas? Dame tu valoración:
Review Date
Reviewed Item
Constructores y destructores en la programación orientada a objetos
Author Rating
51star1star1star1star1star

Gorka Muñoz Andrés

Me llamo Gorka Muñoz y soy un desarrollador melómano. Combino a la perfección la búsqueda de nuevos grupos con la pasión por la tecnología. Desde chiquitito me ha gustado la programación, ahora que soy mayor estoy metido en el mundo del SEO sin olvidarme del /Dev.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *