I singleton sono una cattiva notizia.
- Introducono lo stato globale in un programma. La maggior parte dei programmatori dovrebbe avere familiarità con il motivo per cui lo stato globale è negativo.
- Introducono uno stretto accoppiamento tra il singleton e qualsiasi classe che lo utilizzi. Ciò significa che non puoi riutilizzare le classi in questione senza riutilizzare anche il singleton.
- Rendono problematico il test unitario delle classi che dipendono dal singleton perché non è possibile sostituire facilmente il singleton con un mock.
- Incoraggiano uno stile di codifica in cui le classi tentano di risolvere le proprie dipendenze. Questo è negativo perché può ridurre la chiarezza su quali dipendenze ha la classe.
- PHP ha un'architettura Share Nothing, il che significa che i singleton PHP non sono affatto singleton, possono esserci più istanze attive in qualsiasi momento (una per richiesta aperta).
- Cosa succede se all'improvviso scopri in un secondo momento che hai effettivamente bisogno di più di una delle risorse fornite dal singleton? È uno scenario più comune di quanto potresti pensare
Faresti meglio a guardare dependency-injection invece, poiché risolve i problemi di cui sopra.