Singletons zijn slecht nieuws.
- Ze introduceren een globale staat in een programma. De meeste programmeurs zouden moeten weten waarom de mondiale staat slecht is.
- Ze introduceren een strakke koppeling tussen de singleton en elke klasse die het gebruikt. Dit betekent dat je de betreffende klassen niet opnieuw kunt gebruiken zonder ook de singleton opnieuw te gebruiken.
- Ze maken unit-testen van klassen die afhankelijk zijn van de singleton problematisch omdat je de singleton niet gemakkelijk kunt vervangen door een mock.
- Ze moedigen een coderingsstijl aan waarbij klassen proberen hun eigen afhankelijkheden op te lossen. Dit is slecht omdat het de duidelijkheid kan verminderen over welke afhankelijkheden de klas heeft.
- PHP heeft een Share Nothing Architectuur, wat inhoudt dat PHP-singles helemaal geen singletons zijn, er kunnen meerdere instanties tegelijk actief zijn (één per open verzoek).
- Wat gebeurt er als je op een later tijdstip plotseling ontdekt dat je eigenlijk meer dan één van de middelen nodig hebt die door de singleton worden geleverd? Het komt vaker voor dan je zou denken
Je kunt beter kijken naar dependency-injection in plaats daarvan, omdat het de bovenstaande problemen oplost.