Я не понимаю, как используется этот «контейнер DI». Примеры, показанные на официальном сайте, ничего мне не говорят: http://pimple.sensiolabs.org
В основном у меня есть простой сайт, состоящий из набора классов: класса DB, класса Cache, класса User и еще нескольких, которые обрабатывают типы контента.
Все эти классы похожи на «сервисы», упомянутые в Pimple, и каждая служба должна иметь возможность вызвать другую услугу. Прямо сейчас я создаю службы в основном классе, который я использую как singleton для обмена службами по другим классам.
Из того, что я читал, Пимл делает именно такие вещи, но как я могу его использовать? : s
Существует руководство по http://phpmaster.com/dependency-injection-with-pimple/, объясняющее, как использовать Pimple в качестве DIC.
Другой (но не обязательно рекомендуемый) подход заключается в том, чтобы вставить контейнер во все необходимые ему компоненты (например, вы используете его как ServiceLocator), а затем вы просто выполняете то, что в документации говорится, что вы должны сделать, чтобы получить объект из Pimple:
class SomeClassThatNeedsSession { private $session; public function __construct(Pimple $container) { $this->session = $container['session']; } }
Другими словами, вы просто получаете то, что вам нужно, и Pimple будет обрабатывать время жизни этого объекта, например, нужно ли его создавать или использовать повторно . OffsetGet является частью интерфейса ArrayAccess
который позволяет вам получить доступ к объекту, например массиву, поэтому, когда вы делаете $container['foo']
Pimple проверяет, имеет ли он закрытие, определенное для foo, является ли его только некоторый параметр и собирает сервис соответственно.
Pimple был результатом сообщения в блоге о Lambdas и Closures, которые вы, возможно, захотите прочитать, чтобы лучше понять, как это работает.
Я не знаю Пимпла, но двигатель DI, который я знаю, берет у вас свои способности. Ваши объекты не создают экземпляры их зависимостей. Вместо этого двигатель DI создает их и обрабатывает их по запросу.
Поэтому, если ваш PHP-код создает новые экземпляры, я думаю, вы должны изменить его, чтобы ваш код получил механизм DI и запрашивал от него зависимости.