Pimple para PHP: guia completo do container DI

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

Recommendations