Singletony to zła wiadomość.
- Wprowadzają do programu stan globalny. Większość programistów powinna wiedzieć, dlaczego stan globalny jest zły.
- Wprowadzają ścisłe sprzężenie między singletonem a dowolną klasą, która go używa. Oznacza to, że nie możesz ponownie użyć klas, o których mowa, bez ponownego użycia singletona.
- Sprawiają, że testowanie jednostkowe klas, które zależą od singletona, jest problematyczne, ponieważ nie można łatwo zastąpić singletona próbą.
- Zachęcają do stylu kodowania, w którym klasy próbują rozwiązać własne zależności. Jest to złe, ponieważ może zmniejszyć jasność co do tego, jakie zależności ma klasa.
- PHP posiada architekturę Share Nothing, co oznacza, że singletony PHP wcale nie są singletonami, może istnieć wiele instancji jednocześnie (jedna na otwarte żądanie).
- Co się stanie, jeśli później nagle odkryjesz, że faktycznie potrzebujesz więcej niż jednego zasobu dostarczanego przez singletona? To bardziej powszechny scenariusz, niż mogłoby się wydawać
Lepiej przyjrzyj się dependency-injection zamiast tego, ponieważ rozwiązuje powyższe problemy.