Подтвердить что ты не робот

Понимание прыща

Я не понимаю, как используется этот "контейнер DI". Примеры, показанные на официальном сайте, ничего мне не говорят: http://pimple.sensiolabs.org

В основном у меня есть простой сайт, состоящий из набора классов: класса DB, класса Cache, класса User и еще нескольких, которые обрабатывают типы содержимого.

Все эти классы похожи на "сервисы", упомянутые в Pimple, и каждая служба должна иметь возможность вызвать другую услугу. Прямо сейчас я создаю службы в основном классе, которые я использую как singleton для обмена службами по другим классам.

Из того, что я читаю, Пимпл делает именно это, но как его использовать?: S

4b9b3361

Ответ 1

В 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 был результатом сообщения

Ответ 2

Я не знаю Pimple, но двигатель DI, который я знаю, берет инстанцирование от ваших рук. Ваши объекты не создают экземпляры их зависимостей. Вместо этого двигатель DI создает их и обрабатывает их по запросу.

Итак, если ваш PHP-код создает новые экземпляры, я думаю, вы должны его изменить, чтобы ваш код получил механизм DI и запрашивал от него зависимости.