У меня есть проект, над которым я работал около года назад. Я закодировал в нем разные вещи, и это было в то время, когда я только начинал изучать внедрение зависимостей.
Короче говоря, я забыл, как передать параметр конструктору. Я пробовал, хотя вроде ничего не делает. Я пробовал посмотреть существующий код для Игральная кость, но не могу его разобрать.
<?php declare(strict_types = 1);
$dice = new \Dice\Dice;
$configRule = [
"constructParams" => ["config_directory_here"],
];
$dice->addRule("App\Providers\Configuration", $configRule);
Рассматриваемый класс
<?php declare(strict_types = 1);
namespace App\Providers;
class Configuration {
private $config;
public function __construct($configDirectory) {
exit($configDirectory);
$this->config = array();
$this->loadConfig($configDirectory);
}
}
Как видите, у меня в конструкторе есть:
exit($configDirectory);
Я ничего не получаю обратно, он просто продолжает код и печатает шаблон Twig, разве он не должен хотя бы просто печатать пустую строку, даже если она не была передана?
Я не уверен, проблема ли это в моем коде игральных костей или в самом PHP. У меня автозагрузка PS4, поэтому класс конфигурации должен быть включен.
"autoload": {
"psr-4": {
"App\\": "src"
}
}
Кто-нибудь может мне здесь помочь? Спасибо! При добавлении приведенного ниже кода он работает так, как ожидалось, но мне нужно использовать контейнер внедрения зависимостей для загрузки класса.
$config = new \App\Providers\Config("test");
«PHP обязательно передает параметры конструктора», если вы читаете вопрос, я полагаюсь на DIC, а не на PHP. Эхо, а затем выход будут делать то же самое, на случай, если я просто попробовал это, и это не изменило результат.
включите код, который инициализирует Configuration с помощью DIC.
У меня уже есть, это первый блок кода.






Предполагается, что конструктор создает объект и не может возвращать ничего, кроме объекта, который он пытается создать. Вы никогда не должны создавать конструкторы, которые выполняют какую-либо работу, кроме назначения параметров конструктора свойствам объекта.
В этом нет абсолютно никакого смысла. Конструктор завершится нормально, если я сам инициализирую класс без DIC, что доказывает, что проблема связана с DCI, и я выхожу только для целей отладки. Это не ответ.
Полное раскрытие: я автор Dice.
Причина, по которой это не работает, заключается в том, что Dice никогда не создает объект преждевременно. Объект Configuration не будет создан, пока вы не запросите экземпляр из контейнера:
$configuration = $dice->create("App\Providers\Configuration");
Почему не
echo, а затемexitдля уверенности? PHP обязательно передает параметры конструктора. Кажется, вы спрашиваете о конкретном способе выполнения DI, который предварительно настроен в определенной структуре.