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

Гик, как рамки внедрения инъекций в PHP

Существуют ли какие-либо схемы для инъекций, подобные Guice или аналогичные, в PHP? Если нет, то есть какие-либо хорошие рамки внедрения инъекций в PHP?

Мне нужно реализовать тот же код в PHP, что я реализовал на Java, и я использую Guice в своем проекте Java. Поэтому было бы проще реализовать версию PHP, если бы она использовала аналогичную инфраструктуру.

4b9b3361

Ответ 1

(отправка комментария в ответ)

Посмотрите на мой клон Guice под названием Sharbat (означает сок). API совсем не похож на Guice's.

У него есть почти все, что вам нужно:

  • Ввод конструктора (не требует аннотации @Inject)
  • Ввод полей (независимо от видимости, используя @Inject (FooBar))
  • Ввод метода (независимо от видимости, требует @Inject аннотации)
  • Инъекция поставщика (для полей через @InjectProvider (T = FooBar) для методов через @Provider (T = FooBar, param = fooBarProvider)
  • Области (возможно реализовать пользовательский)
  • AOP (метод перехватчиков)
  • Циклические зависимости

См. файл readme, например, использование.

Ответ 2

Мне нравится легкий Aura.Di. В файле readme на связанной странице github вы получите достаточно информации, чтобы начать работу через пару минут. Это зависит от 5.3.

Я не думаю, что использование аннотаций Guice может быть реализовано в PHP во время выполнения без особого влияния на производительность, если это ваш основной запрос.

Ответ 3

Я бы рекомендовал вам pimple. Он очень прост в использовании.
Существует интересная презентация об этом контейнере для инъекций зависимостей (автор этой презентации является создателем прыща).

Ответ 5

Вот еще одна структура зависимостей для добавления в список: PHP-DI

Это контейнер, который должен быть очень практичным в использовании, после соглашения по конфигурации (поэтому вы в конечном итоге пишете гораздо меньше конфигурации, чем в других контейнерах).

Он содержит инъекцию зависимостей через аннотации (что необязательно) и минимальная конфигурация:

class Foo {
    /**
     * @Inject
     * @var Bar
     */
    private $bar;

    public function hello() {
        return $this->bar->sayHello();
    }
}

Помните, что аннотации необязательны, но если вам это не нравится, вам не нужно его использовать.

Он очень прост в использовании и очень хорошо сочетается с Zend Framework и Symfony.

(отказ от ответственности: я работаю над этой структурой)

Ответ 7

Отъезд

rg\injektor - это сложный контейнер для инъекций зависимостей для PHP, который был вдохновлен Guice. В отличие от других контейнеров, основанных на отражении, rg\injektor включает генератор классов factory, который можно использовать для предотвращения использования отражения при производстве.

Он содержит инжекцию конструктора, вложение свойств, классы поставщиков, управление объектами, именованные инъекции и еще пару вещей. Он протестирован с помощью модуля и доступен через Composer.