PHP не вызывает конструктор в классе?

У меня есть проект, над которым я работал около года назад. Я закодировал в нем разные вещи, и это было в то время, когда я только начинал изучать внедрение зависимостей.

Короче говоря, я забыл, как передать параметр конструктору. Я пробовал, хотя вроде ничего не делает. Я пробовал посмотреть существующий код для Игральная кость, но не могу его разобрать.

<?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");

Почему не echo, а затем exit для уверенности? PHP обязательно передает параметры конструктора. Кажется, вы спрашиваете о конкретном способе выполнения DI, который предварительно настроен в определенной структуре.

Kita 31.05.2018 02:48

«PHP обязательно передает параметры конструктора», если вы читаете вопрос, я полагаюсь на DIC, а не на PHP. Эхо, а затем выход будут делать то же самое, на случай, если я просто попробовал это, и это не изменило результат.

serialize 31.05.2018 02:51

включите код, который инициализирует Configuration с помощью DIC.

Kita 31.05.2018 03:04

У меня уже есть, это первый блок кода.

serialize 31.05.2018 06:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
61
2

Ответы 2

Предполагается, что конструктор создает объект и не может возвращать ничего, кроме объекта, который он пытается создать. Вы никогда не должны создавать конструкторы, которые выполняют какую-либо работу, кроме назначения параметров конструктора свойствам объекта.

В этом нет абсолютно никакого смысла. Конструктор завершится нормально, если я сам инициализирую класс без DIC, что доказывает, что проблема связана с DCI, и я выхожу только для целей отладки. Это не ответ.

serialize 31.05.2018 06:24

Полное раскрытие: я автор Dice.

Причина, по которой это не работает, заключается в том, что Dice никогда не создает объект преждевременно. Объект Configuration не будет создан, пока вы не запросите экземпляр из контейнера:

$configuration = $dice->create("App\Providers\Configuration");

Другие вопросы по теме