PHP Academy · Lección

Contenedor de inyección de dependencias

Registre servicios y conecte dependencias con el contenedor DI de Symfony.

Lección 2 de 413 pasos

Contenedor de inyección de dependencias es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.

¿Qué es la inyección de dependencias?

Dependency Injection (DI) es un patrón en el que una clase recibe sus dependencias desde el exterior en lugar de crearlas internamente, lo que hace que el código sea fácil de probar y tenga un acoplamiento débil.

El componente DI de Symfony

El componente symfony/dependency-injection de Symfony proporciona un contenedor IoC potente que puede conectar automáticamente, configurar y almacenar en caché las definiciones de servicios.

$ composer require symfony/dependency-injection

Crear un contenedor

Construya un contenedor y registre servicios.

<?php
use Symfony\Component\DependencyInjection\ContainerBuilder;

$container = new ContainerBuilder();

// Register a service:
$container->register("logger", \App\Logger::class);

Añadir argumentos del constructor

Pase argumentos del constructor a las definiciones de servicios.

<?php
$container->register("mailer", \App\Mailer::class)
    ->addArgument("smtp.example.com")
    ->addArgument(587);

Referencias a servicios

Inyecte un servicio en otro mediante una Reference.

<?php
use Symfony\Component\DependencyInjection\Reference;

$container->register("email_service", \App\EmailService::class)
    ->addArgument(new Reference("mailer"))
    ->addArgument(new Reference("logger"));

Obtener un servicio

Obtenga un servicio del contenedor. Las dependencias se resuelven automáticamente.

<?php
$emailService = $container->get("email_service");
$emailService->send("user@example.com", "Welcome!");

Autoconexión

Con la autoconexión activada, el contenedor inspecciona las indicaciones de tipo e inyecta automáticamente los servicios correspondientes.

<?php
$container->register(EmailService::class)
    ->setAutowired(true);
// Constructor is: public function __construct(Mailer $mailer, Logger $logger)

Parámetros

Almacene los valores de configuración como parámetros del contenedor.

<?php
$container->setParameter("mailer.host", "smtp.example.com");
$container->setParameter("mailer.port", 587);

// Reference in service definition:
$container->register("mailer", Mailer::class)
    ->addArgument("%mailer.host%")
    ->addArgument("%mailer.port%");

Configuración YAML

Defina servicios en YAML (requiere symfony/config y symfony/yaml).

# services.yaml
services:
    App\Mailer:
        arguments:
            - "%mailer.host%"
            - "%mailer.port%"

Compilar el contenedor

Compile el contenedor para mejorar el rendimiento. Esto valida las definiciones y optimiza el grafo de servicios.

<?php
$container->compile();
// Dump to PHP cache file:
$dumper = new PhpDumper($container);
file_put_contents("CachedContainer.php", $dumper->dump());

Servicios compartidos y no compartidos

De forma predeterminada, los servicios son compartidos (singleton). Establezca shared(false) para obtener una instancia nueva cada vez que se recupere el servicio.

Resumen

El contenedor DI de Symfony registra, conecta y resuelve servicios. Utilice la autoconexión para mayor comodidad, parámetros para la configuración y compile el contenedor en producción para mejorar el rendimiento.

Comprobación rápida

¿Qué hace la autoconexión en el contenedor DI de Symfony?

Gratis para empezar

Aprende PHP con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
49
Lecciones
195

Preguntas frecuentes

¿La lección «Contenedor de inyección de dependencias» es gratis?

Sí — el texto completo de «Contenedor de inyección de dependencias» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Contenedor de inyección de dependencias»?

Registre servicios y conecte dependencias con el contenedor DI de Symfony. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar PHP Academy?

No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Contenedor de inyección de dependencias»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de PHP Academy?

Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. HttpFoundation: solicitudes y respuestas
  2. Contenedor de inyección de dependencias
  3. EventDispatcher: eventos desacoplados
  4. Componente Console: comandos CLI
← Volver a PHP Academy