Как именно использовать IoC контейнер в PHP? Я понимаю что это и зачем это нужно. Я прочитал уже кучу документации, статей и посмотрел много видео про инъекции зависимостей (как на PHP, как на С++, как на .NET). Но, везде, одно и тоже: "... ну а теперь вы можете использовать это в любом месте вашего проекта" ... и ни где толком ни одного примера или кратенького толкового пояснения КАК это использовать? (Тут я не говорю про фреймворки, там написано, но мне пока не до фреймворков, и опять же момент "КАК" не освящён).
Мне в одном проекте нужно избавиться от Singleton-а поэтому мне и нужен IoC контейнер. Мне особо не важно какой это будет контейнер Pimple или какой-то иной, важно понять как его использовать в разных местах приложения.
Поясню :
Вот есть класс Config с настройками для всей системы.
Его регистрируем через IoC контейнер:use App\IoC;
$IoC = new IoC();
// Объявление сервисов (через вызов функции-замыкания):
$IoC->Config = function($c) {
return new Config($c['Config']);
};
// Теперь через объект $IoC->Config можно вызвать методы нужного мне класса Config
$confDb = $IoC->Config->ReturnConfigDb();
А вот дальше и ступор....
Как его использовать в других классах?
Делал например так:use App\IoC;
class OtherClass{
public function __construct()
{
$confDb = $IoC->Config->ReturnConfigDb();
}
// .........
}
И естественно выдаёт ошибку, пишет, что НЕ знает $IoC и что это неизветсная переменная, а не объект вовсе класса IoC.
Что не так делаю?

21 Авг 2019 в 07:05
243 +1
0
Ответы
1

Проблема в том, что вы пытаетесь использовать переменную $IoC внутри класса OtherClass, но в этом контексте она не определена. Вам нужно передать экземпляр IoC контейнера в конструктор класса OtherClass.

Вот пример того, как можно это сделать:

use App\IoC;
class OtherClass{
private $IoC;
public function __construct(IoC $IoC)
{
$this->IoC = $IoC;
}
public function someMethod()
{
$confDb = $this->IoC->Config->ReturnConfigDb();
}
}

Затем, при создании объекта класса OtherClass, вы можете передать ему экземпляр IoC контейнера:

$IoC = new IoC();
$otherClass = new OtherClass($IoC);
$otherClass->someMethod();

Таким образом, вы передаете экземпляр IoC контейнера в конструктор класса OtherClass и сохраняете его в приватном свойстве. После этого вы можете использовать $this->IoC внутри методов класса.

Надеюсь, это поможет вам понять, как правильно использовать IoC контейнер в PHP.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир