All streams
Search
Write a publication
Pull to refresh
5
0

Пользователь

Send message
Что сподвигло вас использовать глобальные переменные в коде?

global $_javascripts, $_stylesheets;

Почему не в static или обычном свойстве хранить список ресурсов?
Да, про невозможность реализовать ваш пример на PHP — был не прав. Через Reflection API такое возможно.

Все же я считаю что это только еще один способ реализации DI, и не стал бы их делить на полноценные и неполноценные :)
Просто в данном случае необходимые зависимости конфигурируются в самом классе. Удобнее.
Речь идет о PHP, и у данного языка нет возможности реализовать приведенный вами пример. Service Locator — один из способов реализации DI.

Согласен, в моем последнем примере $cointainer сам себе играет в роли Service Locator. Конфигурируемые же им объекты получают зависимости либо через конструктор, либо через специально отведенный для этого метод при создании, и в остальном коде нам нет необходимости обращаться к Pimple как с Service Locator.
Как раз таки нет. Возьмем DiC Symfony — мы так же в конфигурации сервиса указываем каким аргументом что подавать.

Для того что бы использовать Pimple полноценно как DiC, а не как Service Locator, просто необходимо и контроллеры приложения обернуть как сервис — появится возможность передавать как аргументы другие сервисы, или назначать их через setter-ы.

$container['user_controller'] = $container->share(function ($c) {
    return new UserController(
        $c['session_storage']
    );
});
Мы можем инъецировать объекты и параметры во время конструирования сервиса.

В том же примере:

// Объявление сервисов
$container['session_storage'] = function ($c) {
  return new $c['session_storage_class']($c['cookie_name']);
};
$container['session'] = function ($c) {
  return new Session($c['session_storage']);
};


сервис session_storage передается в виде аргумента в конструктор класса Session.
Не спорю, что упоминалось, и были показаны некоторые возможности, но считаю что Pimple достоин отдельной статьи.
2

Information

Rating
Does not participate
Location
Россия
Registered
Activity