Инверсия контейнера управления для PHP?
Я пытаюсь кодировать стиль TDD в PHP, и один из моих самых больших камней преткновения (помимо отсутствия приличной IDE) заключается в том, что мне нужно создать свой собственный взломанный контейнер IoC, чтобы правильно внедрить все мои фиктивные объекты.
Кто-нибудь использовал контейнер Ioc в PHP? Все, что мне удалось найти, - это PHP IOC на постоянно раздражающем phpclasses.org, и, похоже, у него почти нет документации и не так много информации о ней.
Ответы
Ответ 1
Я играл с некоторыми фреймами DI для PHP, но я не использовал их в производстве. Есть несколько ссылок:
Вы упомянули, что используете его для TDD - возможно, посмотрите Инъекция зависимостей для модульных тестов в PHP
Ответ 2
Phemto разрабатывается снова и выглядит довольно многообещающим IMHO.
Несколько других подобных проектов, на которые вы можете посмотреть:
bucket (Отказ от ответственности: я главный автор этого)
php-port picocontainer существует уже давно. Я не думаю, что это активно развивается, но, с другой стороны, я считаю, что он довольно стабилен. Я долгое время смотрел на него.
Довольно новый проект, который я недавно наткнулся на Crafty. Не уверен, сколько людей использует его, хотя.
Я также смотрю sphicy, который выглядит интересным.
Ответ 3
Вы также можете попробовать Ding (http://marcelog.github.com/Ding), который моделируется после Spring (tm) для Java. Это полная инверсия контейнера для инъекций управления и зависимостей, который также поддерживает AOP
Ответ 4
Как насчет Инъекции зависимостей Symfony или эквивалентного компонента PHP 5.3+ из проекта symfony 2.0.
Ответ 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 - это путь