Как именно использовать 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 Что не так делаю?
Проблема в том, что вы пытаетесь использовать переменную $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.
Проблема в том, что вы пытаетесь использовать переменную $IoC внутри класса OtherClass, но в этом контексте она не определена. Вам нужно передать экземпляр IoC контейнера в конструктор класса OtherClass.
Вот пример того, как можно это сделать:
use App\IoCclass 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.