Singletoner er dårlige nyheder.
- De introducerer global tilstand i et program. De fleste programmører burde være bekendt med, hvorfor den globale tilstand er dårlig.
- De introducerer tæt kobling mellem singletonen og enhver klasse, der bruger den. Det betyder, at du ikke kan genbruge de pågældende klasser uden også at genbruge singletonen.
- De gør enhedstestning af klasser, der afhænger af singletonen problematisk, fordi du ikke nemt kan erstatte singletonen med en mock.
- De tilskynder til en kodningsstil, hvor klasser forsøger at løse deres egne afhængigheder. Dette er dårligt, fordi det kan mindske klarheden med hensyn til, hvilke afhængigheder klassen har.
- PHP har en Share Nothing Architecture, hvilket betyder, at PHP-single slet ikke er singletons, der kan være flere forekomster i live til enhver tid (én pr. åben anmodning).
- Hvad sker der, hvis du pludselig opdager på et senere tidspunkt, at du rent faktisk har brug for mere end én af de ressourcer, der leveres af singletonen? Det er et mere almindeligt scenario, end du måske tror
Du er bedre stillet at se på afhængighedsinjektion i stedet, da det løser ovenstående problemer.