Índice

Una alternativa al SingletonSingleton Inyección de dependencias

El Singleton es un patrón de diseño que ha sido muy aclamado durante muchos años, pero que hoy está en declive.

Sin embargo es importante conocerlo. Dominando el Singleton, entendiendo sus debilidades, aprenderá otro patrón de diseño indispensable para desarrollar en Symfony: la inyección de dependencias.

1. Presentación del Singleton

El objetivo del patrón de diseño Singleton es limitar el número de instanciaciones posibles de una clase a… solo una.

A priori esto parece imposible porque una clase se puede instanciar sin límites gracias al operador new. Sin embargo, existe un truco que permite limitar este número de instanciaciones.

Sabemos que en PHP el operador new crea una instancia de la clase que le sigue (lo que da lugar a un objeto) y después, si se define, invoca al método mágico __construct de este objeto.

¿Qué pasa si cambiamos la visibilidad de este método, pasándolo a modo “privado”, por ejemplo? PHP desencadenará un error fatal, por lo que la clase se convierte en no instanciable.

Este cambio de visibilidad es la solución para implementar este patrón de diseño. Siendo inaccesible el método __construct(), será necesario pasar por un sistema de instanciación alternativo.

2. Ejemplo

Tomemos el ejemplo clásico de una clase que permite hacer consultas a una base de datos:

<?php   ...