Patron Singleton en PHP

Qué es el patrón Singleton

Antes de comenzar con el patron singleton en PHP, veamos la definición de lo que es el patrón singleton como tal.

Patron Singleton:
Garantiza que una clase solo tenga una instancia, y proporciona un punto de acceso global a ella.
-Desing Patterns – Elements of reusable object-oriented software – GoF

¿Para qué? Bueno esto tendría diferentes funcionalidades, como cuando queremos ahorrar memoria.

En este caso mas específico, que es PHP,  utilizaré un ejemplo con el que en cierto momento me encontré y resulta que es bastante utilizado en entornos Web, el cual es el de una conexión con una base de datos.

Patrón Singleton en PHP para una conexión a una base de datos

Aquí nos comienza a sonar coherente el uso de este patrón de diseño, pues de esta manera en vez de crear varias veces una instancia para realizar la conexión (el cual representaría entre otras cosas un gasto innecesario de memoria), solo la creamos una vez cuando aún no hemos llamado a esta clase y al volver a llamarla (la segunda en adelante) estaremos obteniendo el valor de la misma conexión previamente utilizada.

Ya todo cobra sentido ¿No es así?

Ahora que tenemos motivo y comprensión para hacer esto, veamos un poco de código.

Primeramente debemos crear el método constructor como “private” para que no se pueda instanciar.
Luego crear una manera para crear una sola conexión o regresar una ya activa.
Esto lo logramos con algo tan simple como un if. Si la instancia no existe, la creamos.

Esta es parte de nuestra clase, pero aún se ve un poco inútil, ¿cierto?

Bueno imaginemos que tenemos ciertas funciones dentro de la clase DataBase. Tales como:

Y ahora para acceder a las funciones, debemos llamar getInst primero, luego llamar a la función especifica:

Si utilizamos:

Ventajas del patrón Singleton en PHP

Ahora con el ejemplo completo, podemos nombrar ventajas mas específicas de este patrón de diseño en este ejemplo:

  • La aplicación ahorrara recursos del servidor
  • Al tener una sola instancia a la clase DataBase, evitará que tenga muchas conexiones innecesarias
  • Tenemos un código un poco mas limpio y entendible

1.) Que nuestra aplicación web ahorre recursos del servidor.
2.) Tenemos bien controlado la creación de objetos, al no permitir que nuestra aplicación tenga innumerable y descontroladas conexiones innecesarias abiertas a una misma base de datos.

Usos generales

Ahora después de este ejemplo, podemos darnos cuenta que este patron de diseño nos puede ayudar cada que necesitemos mantener un dato, variable, o función, durante un tiempo sin guardarlo en la base de datos, por ejemplo sesiones, o serializaciones que comienzan a contar en X momento y después se pierde su valor.

Codigo en gitHub

https://github.com/balo215/SingletonPHP