Inyección de dependencias para código limpio en PHP

Clase 20 de 23Curso de Fundamentos de PHP

Resumen

Escribir código limpio y organizado es el pilar principal de un desarrollo profesional en PHP. En esta ocasión, daremos pasos clave que optimizan nuestro proyecto mediante el uso de la inyección de dependencias, buscando un software más sostenible y fácil de mantener.

¿Por qué programar con intención mejora el código?

Programar con intención implica escribir código que refleje claramente su propósito, aún si la solución final no está implementada. Por ejemplo, al contemplar una función para iniciar un chat con diferentes servicios, conviene imaginar primero cómo sería nuestra solución ideal.

Al definir:

$app = new Chat(new OpenAI());
$app->start();

se muestra claramente la intención del código: deseamos inicializar un chat y comenzar a usarlo inmediatamente. Esto es programar con intención, definir claramente lo que queremos antes de incluso implementarlo.

¿Cómo utilizar correctamente la inyección de dependencias en PHP?

La inyección de dependencias permite desacoplar nuestras clases y facilita que podamos cambiar partes del sistema sin afectar otras secciones del programa. Para implementarla adecuadamente puedes seguir estos pasos:

  • Crear una clase que use dependencias externas.
  • Definir en el constructor de esta clase las dependencias que necesita en forma explícita.
  • Usar esas dependencias a través de variables internas.

Un ejemplo básico según lo revisado es crear la clase Chat:

namespace TuProyecto;

class Chat {
    private $servicio;

    public function __construct($servicio) {
        $this->servicio = $servicio;
    }

    public function start() {
        // Aquí iría el algoritmo del chat original.
    }
}

En este caso estamos pasando el servicio OpenAI al constructor.

¿Dónde y cómo iniciar correctamente tu aplicación PHP con esta metodología?

La correcta configuración y utilización de la inyección de dependencias comienza en nuestra entrada principal de la aplicación, por ejemplo en Bootstrap.php. Aquí indicamos explícitamente el servicio requerido:

// En Bootstrap.php
$app = new Chat(new OpenAI());
$app->start();

Este objeto Chat, ahora bien parametrizado, se utiliza luego desde un archivo ejecutable donde el start() inicia el flujo de la aplicación. ¿Qué logramos así? Mayor claridad del código, facilidad de mantenimiento y escalabilidad.

¿De qué otras maneras puedes mejorar aún más tu código PHP? ¿Has intentado otras técnicas alternativas a ésta? Comparte tus experiencias en los comentarios.