Основная цель - сделать основные классы (созданные с помощью params) доступными из любого места приложения - в контроллерах, преобразователях, моделях, помощниках и т. Д.
Например, у нас есть преобразователь, который зависит от объекта базы данных:
class Foo_Mapper
{
private $database;
public function __construct(Database $database)
{
$this->database = $database;
}
public function getFoo(array $criteria)
{
// ...
}
}
Вариант 1: Внедрение базовой зависимости.Проблема в том, что каждый раз, когда мне нужно создать mapper, мне также нужно создавать экземпляр объекта базы данных (с параметрами).
$database = new Database($params);
$foo_mapper = new Foo_Mapper($database);
Вариант 2: Реестр.Основные объекты создаются и помещаются в реестр, чтобы любой другой объект мог легко получить к ним доступ.
// Somewhere in bootstrap...
$registry = Registry::getInstance();
$registry->database = new Database($params));
// Usage
$registry = Registry::getInstance();
$foo_mapper = new Foo_Mapper($registry->database);
Есть ли лучший способ сделать то, что я хочу?Есть ли недостатки?