Я начинаю новый проект и создаю базу для работы. Несколько вопросов поднялись, и я, вероятно, буду спрашивать здесь немало, надеюсь, что найду ответы.
Первый шаг - обрабатывать зависимости для объектов. Я решил пойти с шаблоном проектирования инъекций зависимостей, к которому я отношусь несколько новым, для обработки всего этого для приложения.
Когда я действительно кодировал это, я столкнулся с проблемой. Если класс имеет несколько зависимостей и вы хотите передать несколько зависимостей через конструктор (чтобы они не могли быть изменены после создания экземпляра объекта).
Как вы это делаете, не передавая массив зависимостей, используя call_user_func_array(), eval() или Reflection? Это то, что я ищу:
<?php
class DI
{
public function getClass($classname)
{
if(!$this->pool[$classname]) {
# Load dependencies
$deps = $this->loadDependencies($classname);
# Here is where the magic should happen
$instance = new $classname($dep1, $dep2, $dep3);
# Add to pool
$this->pool[$classname] = $instance;
return $instance;
} else {
return $this->pool[$classname];
}
}
}
Опять же, я хотел бы избежать самых дорогостоящих методов вызова класса. Любые другие предложения?
Кроме того, как мне получить доступ к классам класса DI внутри классов, например, в контроллерах, которым требуется доступ к различным моделям? Должен ли я называть его статически или передавать его по каждому классу, который потребует его? Я не думаю, что последняя идея возможна.
Спасибо всем.