Pregunta

Estoy atascado en un servidor PHP 4, y me gustaría comenzar a mover un antiguo proyecto heredado a los patrones de diseño modernos, incluida la inyección de dependencias. ¿Existen marcos de inyección de dependencia que funcionen con PHP 4?

¿Fue útil?

Solución

Encontré esto (goteo), pero parece que no se ha actualizado en unos pocos años.

Otros consejos

La mayoría de los marcos de inyección de dependencias utilizan la reflexión para determinar las dependencias. Dado que PHP4 no tiene tipos de letra, realmente no puede hacer esto. Se han realizado experimentos con el uso de archivos de configuración: algunas veces incrustados en comentarios en el código (a menudo llamados anotaciones). Si bien esto funciona, lo encuentro un poco torpe. En mi opinión, es mejor usar la naturaleza dinámica de PHP para su ventaja, que intentar aplicarle soluciones estáticamente tipadas. Puedes recorrer un largo camino con fábricas hechas a mano. Consulte, por ejemplo, esta publicación sobre cómo .

No creo que un marco de inyección de dependencia realmente funcione en PHP debido a la forma en que los programas orientados a objetos están estructurados en él. En primer lugar, no es como C # o Java en el que los binarios ya están allí y solo tienes que encontrar una manera de instanciar este objeto e inyectarlo en otro. PHP tiene que cargar los archivos de clase e interpretarlos antes de que pueda usarlos. Entonces, si tiene jerarquías de herencia profundas con PHP, no creo que sea una buena idea.

Dado que PHP es un lenguaje de secuencias de comandos, es mejor aprovecharlo así: un lenguaje de secuencias de comandos. Lo que significa que simplemente haría uso de métodos simples de fábrica o generador para hacer algo similar a la inyección de dependencia. No lo cargaría con un marco DI que solo se agregará a las cosas que el tiempo de ejecución de PHP tiene que procesar para cada solicitud web (a menos que realice el almacenamiento en caché de código de operación, pero aún habrá gastos generales en los que las plataformas web y Java no incurren. RED). Si tengo que cambiar los objetos que se inyectarán en los objetos o cómo se crean, sería una tarea simple editar el script que contiene los métodos de fábrica / generador. No hay necesidad de recompilar allí de todos modos. Así que tengo flexibilidad y tengo una arquitectura ligera que es adecuada para la forma en que PHP hace las cosas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top