Un contenedor de servicios (o contenedor de inyección de dependencias) simplemente es un objeto PHP que gestiona la creación de instancias de los servicios (es decir, de los objetos).
Supongamos por ejemplo que tienes una clase PHP sencilla que envía mensajes de correo electrónico. Sin un contenedor de servicios, debes crear manualmente el objeto cada vez que lo necesites:
use Acme\HelloBundle\Mailer;
$mailer = new Mailer('sendmail');
$mailer->send('[email protected]', ...);
Este código es bastante fácil, ya que la clase imaginaria Mailer
se encarga de configurar el método utilizado para enviar los mensajes de correo electrónico (por ejemplo, sendmail
, smtp
, etc.). ¿Qué sucede si tienes que utilizar la clase Mailer
en otro punto de la aplicación? ¿Tienes que copiar y pegar el mismo código en todos los sitios? ¿Y si tienes que cambiar la forma en la que se envían los emails? ¿Tienes que buscar en el código de toda la aplicación y cambiar la misma configuración decenas de veces?