Я - самообучающийся, пытаюсь стать хорошим разработчиком PHP и хочу полностью понять Внедрение Зависимостей.
Я понимаю общий принцип, в теории внедрение зависимостей делает мои классы не имеющими тесно связанных зависимостейв другие классы.
Но я не понимаю, как это может быть полностью реализовано на практике.
Пример с использованием контейнера PHP League и Пример контроллера:
/***************************************************************************************
* DI Container setup
***************************************************************************************/
$container = new Container();
/***************************************************************************************
* Register Service Providers
***************************************************************************************/
$container->addServiceProvider(new \App\Providers\ConfigProvider);
/***************************************************************************************
* Register Container Class Dependencies
***************************************************************************************/
$container->share('App\Http\Controller')
->withArguments(['config']);
Теперь в моем контроллере я получаю введенную зависимость следующим образом:
class Controller
{
public $config;
function __construct($config)
{
$this->config = $config;
}
function index()
{
$newConfigItem = 'domain.com';
$configDomain = $this->config->setConfig($newConfigItem);
}
}
Контроллер - это просто пример, это может быть любой класс, любой тип класса, например, Serviceprovider, Middleware и т. Д.
Это более общий вопрос относительно правильной обработки внедрения зависимостей.
Не использование метода setConfig () внедренного класса Config создает новыйтесно связанная зависимость?
Даже если бы я использовал Контейнер для создания нового Объекта, используя контейнер напрямуюв любом классе только что создали зависимость от метода контейнера, используемого для регистрации / расширения объектов в контейнере.
Или мне нужен дополнительный слой классов PHP, которые каким-то образом обертывают мои зависимости, чтобы использовать новые имена методов, но дажезатем этот дополнительный слой классов php имеет зависимости, которые необходимо скорректировать, если мне нужно отключить используемые библиотеки / пакеты / компоненты.
Где я ошибаюсь в своем мышлении?