Pimple PHP: guía completa del contenedor DI ligero

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Pimple PHP: guía completa del contenedor de inyección de dependencias ligero

1. ¿Qué es Pimple y para qué sirve?

Pimple es un contenedor de inyección de dependencias (Dependency Injection Container) ligero para PHP, creado por Fabien Potencier, el desarrollador del framework Symfony. A diferencia de los contenedores DI más pesados, Pimple ofrece una solución minimalista que puedes integrar en cualquier proyecto sin sobrecarga innecesaria. Esta biblioteca implementa el patrón Service Locator y proporciona una API sencilla para gestionar objetos y sus dependencias.

El objetivo principal de Pimple es simplificar la gestión de dependencias en aplicaciones PHP. En lugar de crear objetos manualmente con new y pasarlos a los constructores, registras servicios en el contenedor y los solicitas por su nombre. El contenedor resuelve las dependencias automáticamente, crea objetos una sola vez (singleton) o cada vez que se solicitan (factory), y gestiona su ciclo de vida. Esto hace que el código sea más modular, testeable y fácil de mantener.

Pimple es ideal para proyectos pequeños y medianos que no necesitan toda la funcionalidad de Symfony DI o PHP-DI. No usa anotaciones, no requiere configuración compleja y funciona desde PHP 5.3. La biblioteca se usa activamente en Silex (micro-framework) y otros proyectos PHP donde la simplicidad y la velocidad son clave.

2. Instalación

Pimple se instala a través de Composer, el gestor de paquetes estándar de PHP. Ejecuta en tu terminal:

composer require pimple/pimple

Después de la instalación, incluye el cargador automático de Composer en tu archivo PHP:

require_once __DIR__ . '/vendor/autoload.php';

Si aún no tienes un archivo composer.json, créalo con este contenido:

{
    "require": {
        "pimple/pimple": "^3.5"
    }
}

3. Inicio rápido — ejemplo mínimo funcional

Crea un archivo index.php y añade el siguiente código:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Pimple\Container;

// Creamos el contenedor
$container = new Container();

// Definimos un servicio simple (closure)
$container['saludo'] = function ($c) {
    return '¡Hola, Mundo!';
};

// Definimos un servicio con parámetro
$container['saludo_personalizado'] = function ($c) {
    return function ($nombre) use ($c) {
        return '¡Hola, ' . $nombre . '!';
    };
};

// Obtenemos los servicios
echo $container['saludo'] . "\n"; // ¡Hola, Mundo!
echo $container['saludo_personalizado']('Ana') . "\n"; // ¡Hola, Ana!

// Definimos un servicio como objeto
class Logger {
    public function log($mensaje) {
        echo "[LOG] $mensaje\n";
    }
}

$container['logger'] = function ($c) {
    return new Logger();
};

$container['logger']->log('Aplicación iniciada');

Ejecuta el script: php index.php. Verás la salida de tres mensajes. Este ejemplo muestra el registro y la obtención básica de servicios desde el contenedor.

4. Métodos y clases principales

4.1. Pimple\Container::__construct()

Firma: public function __construct(array $values = [])

Descripción: Crea una nueva instancia del contenedor. Puedes pasar un array con valores/servicios predefinidos.

$container = new Container([
    'db.host' => 'localhost',
    'db.name' => 'test'
]);

4.2. offsetSet($id, $value) (método mágico mediante [])

Firma: public function offsetSet($id, $value): void

Recommendations