El propósito de Singleton es limitar las instancias de objetos a una y brindar acceso global.
Ambas son cosas que no desea ni necesita.
Limitar su instancia a una instancia no tiene sentido en PHP, donde esta restricción solo se aplica a las instancias en el actual solicitud. Si dos solicitudes llegan a su sitio de microblogging al mismo tiempo, aún habrá una instancia por cada solicitud. Si desea asegurarse de que solo haya una instancia, simplemente no cree una segunda instancia.
El acceso global tampoco es nada que desee, porque rompe la encapsulación. Si necesita una determinada instancia dentro de sus objetos, pásela a través de inyección de dependencia . Eso es limpio y mantenible. Tiene el beneficio adicional de permitirle intercambiar fácilmente dependencias con otras implementaciones, como por ejemplo clases simuladas para sus pruebas unitarias .
Incluso Erich Gamma , uno de los inventores del patrón Singleton, cuestiona este patrón hoy en día:
Es mejor evitar los Singletons.