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
También en la biblioteca