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.
Défi
FacileConstruisons 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 classeProductdans l'espace de nomsApp\Models. Elle doit avoir des propriétéspublic $nameetpublic $price, un constructeur qui accepte et définit ces deux valeurs, et une méthodegetInfo()qui retourne"[name]: $[price]".src/Models/Customer.php— Définissez une classeCustomerdans l'espace de nomsApp\Models. Elle doit avoir une propriétépublic $name, un constructeur qui accepte et définit le nom, et une méthodegreet()qui retourne"Welcome, [name]!".vendor/autoload.php— Créez un autoloader simple en utilisantspl_autoload_registerqui imite le comportement de Composer. Il doit mapper le préfixe d'espace de nomsApp\vers le répertoiresrc/, en convertissant les séparateurs d'espace de noms en séparateurs de répertoire et en ajoutant.phppour charger le fichier correct.index.php— C'est votre fichier de point d'entrée. Appelez l'autoloader depuisvendor/autoload.phpavec une seule ligne, puis utilisez le mot-cléusepour importer à la foisApp\Models\ProductetApp\Models\Customer. Créez unProductavec le nom"Laptop"et le prix999, et unCustomeravec le nom"Alice". Affichez le résultat de l'appel àgreet()sur le client etgetInfo()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
?>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
1Les bases de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition de méthodeLe mot-clé finalClasses abstraitesRécapitulatif - Hiérarchie des employés7Encapsulation
Public, Protégé, PrivéModificateurs d'accès en détailGetters et SettersMasquage d'informationPromotion de constructeur (8.0)Récapitulatif - Système de gestion d'étudiants10Concepts avancés de la POO
Composition vs HéritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibers (PHP 8.1)Clonage d'objets : analyse approfondieGénérateurs et Itérateurs13Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository2Espaces de noms et Autoloading
Introduction aux espaces de nomsLe mot-clé useStandard d'Autoloading PSR-4L'Autoloader ComposerRécapitulatif - Projet organisé5Interfaces et Contrats
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesInterface vs Classe AbstraiteType Hinting avec les InterfacesRécapitulatif - Calculateur de Formes8Méthodes magiques
Introduction aux méthodes magiques__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Clonage d'objets__serialize & __unserializeRécapitulatif - Collection personnalisée3Propriétés de classe
Propriétés d'instance vs Propriétés statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés readonly (PHP 8.1)Récapitulatif - Gestionnaire de compte bancaire6Polymorphisme
Retour sur la redéfinition de méthodePolymorphisme via les interfacesType Hinting et Types d'unionLiaison statique tardiveRécapitulatif - Processeur de paiement9Traits
Introduction aux TraitsUtilisation de plusieurs TraitsRésolution des conflits de TraitsMéthodes abstraites dans les TraitsTraits vs Héritage12Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie