Инверсия контейнера управления для PHP?

Я пытаюсь кодировать стиль TDD в PHP, и один из моих самых больших камней преткновения (помимо отсутствия приличной IDE) заключается в том, что мне нужно создать свой собственный взломанный контейнер IoC, чтобы правильно внедрить все мои фиктивные объекты.

Кто-нибудь использовал контейнер Ioc в PHP? Все, что мне удалось найти, - это PHP IOC на постоянно раздражающем phpclasses.org, и, похоже, у него почти нет документации и не так много информации о ней.

Ответ 1

Я играл с некоторыми фреймами DI для PHP, но я не использовал их в производстве. Есть несколько ссылок:

  • http://www.stubbles.net/, который Я думаю, это самый старый, который я пробовал.
  • http://php.xjconf.net/
  • FLOW3 - Я верю, что это будет стать очень приятной структурой (ее beta прямо сейчас)

Вы упомянули, что используете его для TDD - возможно, посмотрите Инъекция зависимостей для модульных тестов в PHP

Ответ 2

Phemto разрабатывается снова и выглядит довольно многообещающим IMHO.

Несколько других подобных проектов, на которые вы можете посмотреть:

bucket (Отказ от ответственности: я главный автор этого)

php-port picocontainer существует уже давно. Я не думаю, что это активно развивается, но, с другой стороны, я считаю, что он довольно стабилен. Я долгое время смотрел на него.

Довольно новый проект, который я недавно наткнулся на Crafty. Не уверен, сколько людей использует его, хотя.

Я также смотрю sphicy, который выглядит интересным.

Ответ 3

Вы также можете попробовать Ding (http://marcelog.github.com/Ding), который моделируется после Spring (tm) для Java. Это полная инверсия контейнера для инъекций управления и зависимостей, который также поддерживает AOP

Ответ 5

PHP-DI - это другой контейнер для инъекций зависимостей.

Он содержит вложение зависимостей через аннотации и минимальную конфигурацию, вот пример:

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

Он очень прост в использовании и интегрируется с Zend Framework, например.

(да, я работаю над этой структурой)

Ответ 6

Я работаю над PHP IoC/DI Container под названием "Субстрат" за последние шесть месяцев. Это все еще очень много работает, но он был развернут в производстве в течение полутора месяцев и до сих пор работает очень хорошо.

Субстрат вдохновлен Spring Framework, но написан с учетом сильных и слабых сторон PHP. Документация на данный момент довольно минимальна, но есть пример пример кода, включая примерный пример тестирования. Это то, что вы считаете возможным использовать для TDD?

Ответ 7

Laravel 4 имеет лучшую структуру IoC и DI. если вы не возражаете использовать фреймворк, то Laravel 4 - это путь