Pimple para PHP: guia completo do container DI simples
1. O que é Pimple e para que serve?
Pimple é um container leve de injeção de dependências (Dependency Injection Container) para PHP, criado por Fabien Potencier, o desenvolvedor do Symfony Framework. Diferente de containers DI complexos, o Pimple oferece uma solução minimalista que pode ser integrada em qualquer projeto sem custos adicionais. A biblioteca implementa o padrão Service Locator e fornece uma API simples para gerenciar objetos e suas dependências.
O principal objetivo do Pimple é simplificar o gerenciamento de dependências em aplicações PHP. Em vez de criar objetos manualmente com new e passá-los para construtores, você registra serviços no container e os solicita pelo nome. O container resolve automaticamente as dependências, cria objetos uma única vez (singleton) ou sempre que solicitado (factory) e gerencia seu ciclo de vida. Isso torna o código mais modular, testável e fácil de manter.
Pimple é ideal para projetos pequenos e médios que não precisam de todo o poder do Symfony DI ou PHP-DI. Ele não usa anotações, não exige configuração complexa e funciona a partir do PHP 5.3. A biblioteca é amplamente utilizada no Silex (micro-framework) e em outros projetos PHP que priorizam simplicidade e desempenho.
2. Instalação
O Pimple é instalado via Composer, o gerenciador de pacotes padrão do PHP. Execute no terminal:
composer require pimple/pimple
Após a instalação, inclua o autoload do Composer no seu arquivo PHP:
require_once __DIR__ . '/vendor/autoload.php';
Se você ainda não tem um composer.json, crie um:
{
"require": {
"pimple/pimple": "^3.5"
}
}
3. Primeiros passos — exemplo mínimo funcional
Crie um arquivo index.php e adicione o seguinte código:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Pimple\Container;
// Criando o container
$container = new Container();
// Definindo um serviço simples (closure)
$container['greeting'] = function ($c) {
return 'Olá, Mundo!';
};
// Definindo um serviço com parâmetro
$container['personal_greeting'] = function ($c) {
return function ($name) use ($c) {
return 'Olá, ' . $name . '!';
};
};
// Obtendo os serviços
echo $container['greeting'] . "\n"; // Olá, Mundo!
echo $container['personal_greeting']('Maria') . "\n"; // Olá, Maria!
// Definindo um serviço do tipo objeto
class Logger {
public function log($message) {
echo "[LOG] $message\n";
}
}
$container['logger'] = function ($c) {
return new Logger();
};
$container['logger']->log('Aplicação iniciada');
Execute o script: php index.php. Você verá três mensagens na saída. Este exemplo mostra o registro básico e a obtenção de serviços do container.
4. Métodos e classes principais
4.1. Pimple\Container::__construct()
Assinatura: public function __construct(array $values = [])
Descrição: Cria uma nova instância do container. Você pode passar um array com valores/serviços pré-definidos.
$container = new Container([
'db.host' => 'localhost',
'db.name' => 'teste'
]);
4.2. offsetSet($id, $value) (método mágico via [])
Assinatura: public function offsetSet($id, $value): void
Também na biblioteca
Rayon para Rust: guia completo com exemplos
Jsoup para Java: Guia completo com exemplos práticos
Trabalhando com CSV em C# (.NET): bibliotecas e exemplos de código
msw para TypeScript: guia completo com exemplos práticos
Bibliotecas WebSocket C# (.NET): SignalR, WebSocket4Net e cliente System.Net.WebSockets