Существует ли структура внедрения зависимостей для PHP4? - PullRequest
2 голосов
/ 25 сентября 2008

Я застрял на сервере PHP 4, и я хотел бы начать перевод старого унаследованного проекта на современные шаблоны проектирования, включая внедрение зависимостей. Существуют ли какие-либо структуры внедрения зависимостей, которые будут работать с PHP 4?

Ответы [ 3 ]

2 голосов
/ 25 сентября 2008

Большинство каркасов внедрения зависимостей используют отражение для определения зависимостей. Поскольку PHP4 не имеет печатных букв, вы не можете этого сделать. Были проведены эксперименты с использованием конфигурационных файлов. Иногда они встроены в комментарии в коде (часто это называется аннотациями). Хотя это работает, я нахожу это немного неуклюжим. На мой взгляд, вам лучше использовать динамический характер PHP в своих интересах, чем пытаться применять к нему статически типизированные решения. Вы можете пройти долгий путь с фабриками ручной работы. См. Например этот пост о том, как .

1 голос
/ 25 сентября 2008

я нашел это (капает), но похоже, что оно не обновлялось в течение нескольких лет.

0 голосов
/ 25 сентября 2008

Я не думаю, что структура внедрения зависимостей действительно будет работать на PHP из-за структуры объектно-ориентированных программ. Прежде всего, это не похоже на C # или Java, где двоичные файлы уже существуют, и вам просто нужно найти способ создать экземпляр этого объекта и внедрить его в другой. PHP должен загрузить файлы классов и интерпретировать их, прежде чем он сможет их использовать. Так что если у вас глубокая иерархия наследования с PHP, я не думаю, что это хорошая идея.

Учитывая, что PHP является языком сценариев, лучше всего использовать его как язык сценариев. Это означает, что я просто использовал бы простые методы фабрики или компоновщика, чтобы сделать что-то похожее на внедрение зависимостей. Я не стал бы обременять это инфраструктурой DI, которая только добавит к вещам, которые среда выполнения PHP должна обрабатывать для каждого веб-запроса (если вы не выполняете кэширование кода операции, но все равно будут накладные расходы, которые не несут веб-платформы для Java и. СЕТЬ). Если мне нужно изменить объекты, которые будут внедрены в объекты, или то, как они создаются, было бы просто отредактировать сценарий, содержащий методы фабрики / сборки. Нет необходимости перекомпилировать там в любом случае. Таким образом, у меня есть гибкость, и у меня есть легкая архитектура, которая подходит для PHP-подхода.

...