2012-02-19 10 views
17

¿Hay algún framework de inyección de dependencia similar o parecido a Guice en PHP? Si no hay buenos marcos de inyección de dependencia en PHP?Guice like frameworks de inyección de dependencia en PHP

Tengo que implementar el mismo código en PHP que he implementado en Java y uso Guice en mi proyecto de Java. Por lo tanto, sería más fácil implementar la versión de PHP si utilizara un marco similar.

+0

Esta pregunta contestada en http://stackoverflow.com/questions/52072/inversion-of-control-container-for-php –

Respuesta

9

(Publicación de mi comentario como respuesta)

Tener un vistazo a mi clon de Guice llamado Sharbat (significa jugo). La API es bastante similar a la de Guice.

Ha prácticamente todo lo que necesita:

  • Constructor inyección (no requiere anotación @Inject)
  • inyección campo (independientemente de la visibilidad, utilizando @Inject (FooBar))
  • Método de inyección (independientemente de la visibilidad, requiere la anotación @Inject)
  • Proveedor de inyección (para campos vía @InjectProvider (T = FooBar), para los métodos a través de @Provider (T = FooBar, PARAM = fooBarProvider)
  • Scopes (posible implementar uno personalizado)
  • AOP interceptores (método)
  • dependencias circulares

consulte el archivo rEADME un ejemplo de uso.

+0

de README.md de Sharbat: "TODO: Documentación y prueba de unidad" - tipo de cosas importantes que han omitido ... sin mencionar que la última actualización fue alrededor de 04/2012 ... –

5

Me gusta el peso ligero Aura.Di. El archivo léame en la página del proyecto Github enlazado le brinda suficiente información para comenzar en un par de minutos. Depende de 5.3 aunque.

No creo que el uso de anotaciones de Guice se pueda implementar en PHP en tiempo de ejecución sin un impacto en el rendimiento muy grande, si esa es su solicitud principal.

+0

Las anotaciones son apoyados a través de docblocks - al igual que en Java (xdoclets) hace mucho tiempo. Doctrine tiene soporte para ellos (http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/basic-mapping.html) –

+0

No podía pensar en un proyecto que utilizara anotaciones en tiempo de ejecución, solo pensé en docblox que no necesita ser extremadamente rápido. Gracias por su ejemplo, pero yo (ingenuamente y no con los datos que lo respaldan) aún creo que puede ser un golpe de rendimiento para el uso no compilado. – chelmertz

+0

Sí, es por eso que debe almacenar en caché estos datos en producción. –

3

Me gustaría recomendarle pimple. Es muy fácil de usar.
Hay un interesante presentation sobre este contenedor de inyección de dependencia (el autor de esta presentación es creador de espinillas).

+0

+1 para las diapositivas de fabien –

+0

Empecé a usar Pimple, ya que me pareció una buena manera de comenzar con DiC en PHP ... después de aproximadamente una semana, llegué a la conclusión de que Pimple es mucho más un Localizador de servicios que una Inyección de Dependencia real contenedor, ya que cada servicio que registre debe estar cableado a mano ... –

3

Aquí hay otro marco de la dependencia a añadir a la lista: PHP-DI

Es un contenedor destinado a ser muy práctico de usar, a raíz de convención sobre configuración (por lo que terminan escribiendo mucho menos de configuración que con la otra contenedores).

Cuenta con inyección de dependencia a través de anotaciones (que es opcional) y configuración mínima:

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

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

Tenga en cuenta que las anotaciones son opcionales, sin embargo, si no desea que usted no tiene que utilizar eso.

Es muy fácil de usar, y se integra muy bien con Zend Framework y Symfony.

(exención de responsabilidad: yo trabajo en este marco)

+0

¡Su PHP-DI 4 es absolutamente increíble! ¿Podría contribuir por favor: http://stackoverflow.com/questions/24076299/circular-dependency-injecting-objects-that-are-directly-depended-on-eachother –

+0

@IliaRostovtsev Gracias :) –

2

Salida

rg \ INJEKTOR es un contenedor de inyección de dependencias sofisticada para PHP que se inspiró en Guice. A diferencia de otros contenedores basados ​​en la reflexión, rg \ indoktor incluye un generador de clase de fábrica que puede usar para evitar el uso de la reflexión en la producción.

Cuenta con inyección de constructor, inyección de propiedad, clases de proveedores, administración de objetos, inyección de nombre y un par de cosas más. Está probado por unidades y está disponible a través de Composer.

Cuestiones relacionadas