Pimple PHP : guide complet avec exemples pratiques

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pimple pour PHP : guide complet du conteneur DI simple

1. Qu'est-ce que Pimple et pourquoi l'utiliser ?

Pimple est un conteneur d'injection de dépendances (Dependency Injection Container) léger pour PHP, créé par Fabien Potencier, le fondateur du framework Symfony. Contrairement aux conteneurs DI volumineux, Pimple offre une solution minimaliste que vous pouvez intégrer dans n'importe quel projet sans frais généraux inutiles. Cette bibliothèque implémente le pattern Service Locator et fournit une API simple pour gérer les objets et leurs dépendances.

L'objectif principal de Pimple est de simplifier la gestion des dépendances dans les applications PHP. Au lieu de créer manuellement des objets avec new et de les passer aux constructeurs, vous enregistrez des services dans le conteneur, puis vous les récupérez par leur nom. Le conteneur résout automatiquement les dépendances, crée les objets une seule fois (singleton) ou à chaque appel (factory), et gère leur cycle de vie. Cela rend le code plus modulaire, testable et maintenable.

Pimple est idéal pour les projets de petite et moyenne envergure qui n'ont pas besoin de toutes les fonctionnalités de Symfony DI ou PHP-DI. Il n'utilise pas d'annotations, ne nécessite pas de configuration complexe et fonctionne à partir de PHP 5.3. La bibliothèque est activement utilisée dans Silex (micro-framework) et d'autres projets PHP où la simplicité et la rapidité sont essentielles.

2. Installation

Pimple s'installe via Composer, le gestionnaire de paquets standard pour PHP. Exécutez dans votre terminal :

composer require pimple/pimple

Après l'installation, incluez l'autoloader de Composer dans votre fichier PHP :

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

Si vous n'avez pas encore de fichier composer.json, créez-le :

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

3. Démarrage rapide — exemple minimal fonctionnel

Créez un fichier index.php et ajoutez le code suivant :

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

use Pimple\Container;

// Création du conteneur
$container = new Container();

// Définition d'un service simple (closure)
$container['greeting'] = function ($c) {
    return 'Bonjour, le monde !';
};

// Définition d'un service avec paramètre
$container['personal_greeting'] = function ($c) {
    return function ($name) use ($c) {
        return 'Bonjour, ' . $name . ' !';
    };
};

// Récupération des services
echo $container['greeting'] . "\n"; // Bonjour, le monde !
echo $container['personal_greeting']('Alice') . "\n"; // Bonjour, Alice !

// Définition d'un service objet
class Logger {
    public function log($message) {
        echo "[LOG] $message\n";
    }
}

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

$container['logger']->log('Application démarrée');

Exécutez le script : php index.php. Vous verrez trois messages affichés. Cet exemple illustre l'enregistrement et la récupération de base des services depuis le conteneur.

4. Méthodes et classes principales

4.1. Pimple\Container::__construct()

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

Description : Crée une nouvelle instance du conteneur. Vous pouvez passer un tableau de valeurs/services prédéfinis.

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

4.2. offsetSet($id, $value) (méthode magique via [])

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

Recommendations