Мне сказали, что синглтоны сложно тестировать.
Мне сказали, что статические методы / объекты тоже не годятся.
Итак, в основном единственное решение, кажется, инъекция зависимостей .
Но ... я действительно не могу привыкнуть к DI, возьмите этот пример:
В моей структуре у меня есть класс, который управляет SQL. Этот класс (и многие другие из моих фреймворков) используют одноэлементный регистратор для записи сообщений (и многие другие помощники).
С DI мой код превратился бы в:
global $logger; //> consider i have been instanciated it at the start of my fw
$query = new PreparedQuery($logger);
$query->prepare() etc.
Теперь это не так уж плохо. //sebastian-bergmann.de/archives/882-Testing-Code-That-Uses-Singletons.html
Довольно интересное чтение, если вы спросите меня.