Programación orientada a objetos en PHP 2: Constructores y destructores

En este segundo artículo vamos a hablar de constructores y destructores.

Cada vez que creamos un objeto hay una función que se ejecuta de forma automática. Es una función a la que se llama constructor.

Esta es una función “magica”, que se ejecuta sin que tengamos que llamarla. Podemos verla en acción con un sencillo ejemplo. Tomemos el código del artículo anterior y le añadimos el constructor.

Un constructor se define así:

Vamos a hacer un constructor que lo único que va a hacer será mostrar un mensaje en la pantalla cuando se cree el objeto:

Si nos vamos a la consola podemos ver el resultado ejecutando el código usando php Noticia.php:

Para ver más claro cuándo se llama a esta función vamos a añadir una línea extra justo delante de la creación del objeto:

Y si volvemos a la consola y ejecutamos el código:

Podemos ver que el mensaje “Objeto creado” se muestra entre el echo y la llamada al método mostrar(). Es decir, se llama a la función __construct() justo en el momento de crear el objeto.

Vale, todo esto es muy bonito pero ¿Para qué sirve un constructor? Para resumir diremos que un constructor se encarga de dejar el objeto listo para ser usado.

Vamos a verlo más claro con un ejemplo. Supongamos que no queremos dar un valor inicial a una noticia como hemos hecho hasta ahora. ¿Qué sentido tiene dar el valor “Primera noticia” a todas las noticias que creemos? Lo que sí tiene más sentido es que en el momento de crear el objeto se le asigne un valor.

Para conseguirlo definiríamos el constructor así:

Y en la creación del objeto tendríamos que pasarle el valor inicial:

Con lo que el código quedaría así:

Si vamos a la consola vemos que está todo correcto:

¿Qué pasaría si no le damos el parámetro al constructor? Pues que tendremos un bonito recordatorio de que hemos metido la pata:

Por supuesto podemos pasar un parámetro vacío y esto no provocará ningún error:

El formato antiguo

Si has visto código con objetos anteriormente es posible que te hayas encontrado con unos constructores diferentes, algo así:

Esta es la forma antigua de los constructores. En PHP 7 se consideran obsoletos y en futuras versiones desaparecerán así que es mejor usar el sistema nuevo.
Por último es importante tener en cuenta que un constructor no devuelve ningún valor.

Destructores

Hay otra función especial que se ejecuta cuando el objeto se elimina de la memoria o cuando termina la ejecución del programa. El nombre de esta función es el destructor.
Se define igual que el constructor.

Si añadimos esta función a nuestro programa:

y lo ejecutamos:

vemos que se llama a esta función al final del programa.

Los destructores no devuelven ningún valor ni se les pueden pasar parámetros.

Por ahora es suficiente de constructores y destructores. Volveremos a hablar de los constructores más adelante cuando hablemos de herencia.

Os dejo aquí el vídeo donde cuento esto mismo pero en plan charlatán:

1 thought on “Programación orientada a objetos en PHP 2: Constructores y destructores”

Leave a Comment