Ну, в этом случае я бы вместо этого построил строитель (или фабрику). Таким образом, ваша фабрика будет вводить зависимость для вас. Таким образом, вы также можете избежать глобальных изменений:
class PreparedQueryFactory {
protected $logger = null;
public function __construct($loggger) {
$this->logger = $logger;
}
public function create() {
return new PreparedQuery($this->logger);
}
}
Таким образом, вы делаете один раз:
$factory = new PreparedQueryFactory($logger);
Тогда, когда вам понадобится новый запрос, просто позвоните:
$query = $factory->create();
Теперь это очень простой пример. Но вы можете добавить все виды сложной логики, если вам нужно. Но дело в том, что, избегая new
в своем коде, вы также избегаете управления зависимостями. Таким образом, вместо этого вы можете передать фабрику (и) по мере необходимости.
Преимущество заключается в том, что все это на 100% поддается проверке, поскольку все вводится везде (в отличие от использования глобальных).
Вы также можете использовать реестр (также известный как Service Container или DI Container), но убедитесь, что вы вводите реестр в.