Как именно использовать 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 можно вызвать методы нужного мне класса Confi
$confDb = $IoC->Config->ReturnConfigDb()
А вот дальше и ступор...
Как его использовать в других классах
Делал например так:use App\IoC
class OtherClass
public function __construct(

$confDb = $IoC->Config->ReturnConfigDb()

// ........

И естественно выдаёт ошибку, пишет, что НЕ знает $IoC и что это неизветсная переменная, а не объект вовсе класса IoC
Что не так делаю?

21 Авг 2019 в 07:05
222 +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 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 620 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир