Menu
Coddy logo textTech

L'Autoloader Composer

Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 13 sur 91.

Écrire votre propre autoloader fonctionne, mais les projets PHP réels utilisent Composer pour gérer l'autoloading automatiquement. Composer lit la configuration de votre projet et génère un autoloader optimisé qui respecte les standards PSR-4.

La configuration se trouve dans un fichier composer.json à la racine de votre projet. Voici comment définir les règles d'autoloading :

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

Cela indique à Composer que toute classe commençant par App\ doit être chargée depuis le répertoire src/. Après avoir configuré cela, Composer génère les fichiers de l'autoloader dans un répertoire vendor/.

Pour utiliser l'autoloader de Composer, vous n'avez besoin que d'une seule ligne en haut de votre fichier d'entrée :

<?php
require 'vendor/autoload.php';

use App\Models\User;
use App\Services\Logger;

$user = new User("Alice");
$logger = new Logger();

Cette unique instruction require gère tout le chargement des classes pour l'ensemble de votre projet. Vous pouvez définir plusieurs mappages d'espaces de noms si nécessaire :

{
    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Tests\\": "tests/"
        }
    }
}

Point clé : L'autoloader de Composer élimine les inclusions manuelles de fichiers et garantit un chargement de classes cohérent dans tout votre projet. C'est l'approche standard utilisée par pratiquement toutes les applications et tous les frameworks PHP modernes.

challenge icon

Défi

Facile

Construisons une petite application qui utilise l'approche d'autoloading de Composer pour organiser les classes sur plusieurs fichiers. Vous allez simuler la manière dont un projet PHP réel structure son code avec les espaces de noms PSR-4 et un autoloader central.

Vous allez créer quatre fichiers qui fonctionnent ensemble :

  • src/Models/Product.php — Définissez une classe Product dans l'espace de noms App\Models. Elle doit avoir des propriétés public $name et public $price, un constructeur qui accepte et définit ces deux valeurs, et une méthode getInfo() qui retourne "[name]: $[price]".
  • src/Models/Customer.php — Définissez une classe Customer dans l'espace de noms App\Models. Elle doit avoir une propriété public $name, un constructeur qui accepte et définit le nom, et une méthode greet() qui retourne "Welcome, [name]!".
  • vendor/autoload.php — Créez un autoloader simple en utilisant spl_autoload_register qui imite le comportement de Composer. Il doit mapper le préfixe d'espace de noms App\ vers le répertoire src/, en convertissant les séparateurs d'espace de noms en séparateurs de répertoire et en ajoutant .php pour charger le fichier correct.
  • index.php — C'est votre fichier de point d'entrée. Appelez l'autoloader depuis vendor/autoload.php avec une seule ligne, puis utilisez le mot-clé use pour importer à la fois App\Models\Product et App\Models\Customer. Créez un Product avec le nom "Laptop" et le prix 999, et un Customer avec le nom "Alice". Affichez le résultat de l'appel à greet() sur le client et getInfo() sur le produit (chacun sur sa propre ligne).

Le concept clé ici est que votre index.php n'a besoin que d'une seule instruction require pour charger l'autoloader — après cela, toutes les classes sont chargées automatiquement lorsque vous les utilisez. C'est exactement ainsi que les frameworks et applications PHP modernes fonctionnent avec Composer.

Aide-mémoire

Composer automatise le chargement des classes en lisant un fichier de configuration composer.json et en générant un autoloader optimisé qui suit les standards PSR-4.

Définissez les règles d'autoloading dans composer.json :

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

Cela mappe l'espace de noms App\ vers le répertoire src/. Composer génère les fichiers de l'autoloader dans un répertoire vendor/.

Utilisez l'autoloader de Composer avec une seule instruction require :

<?php
require 'vendor/autoload.php';

use App\Models\User;
use App\Services\Logger;

$user = new User("Alice");
$logger = new Logger();

Définissez plusieurs mappages d'espaces de noms si nécessaire :

{
    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "Tests\\": "tests/"
        }
    }
}

L'autoloader de Composer élimine les inclusions manuelles de fichiers et constitue l'approche standard dans les applications PHP modernes.

Essayez vous-même

<?php
// TODO : Inclure l'autoloader depuis vendor/autoload.php

// TODO : Utiliser le mot-clé 'use' pour importer App\Models\Product

// TODO : Utiliser le mot-clé 'use' pour importer App\Models\Customer

// TODO : Créer un Product avec le nom "Laptop" et le prix 999

// TODO : Créer un Customer avec le nom "Alice"

// TODO : Afficher le résultat de greet() du client

// TODO : Afficher le résultat de getInfo() du produit
?>
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet