Autoloader de Composer
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy. Leçon 13 sur 91.
Écrire votre propre chargeur automatique fonctionne, mais les vrais projets PHP utilisent Composer pour gérer automatiquement le chargement automatique. Composer lit la configuration de votre projet et génère un chargeur automatique optimisé qui respecte les normes PSR-4.
La configuration se trouve dans un fichier composer.json à la racine de votre projet. Voici comment définir les règles de chargement automatique :
{
"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 cette configuration, Composer génère les fichiers de chargement automatique 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 seule instruction require gère le chargement de toutes les classes 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 cohérent des classes dans tout votre projet. Il s’agit de 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 de chargement automatique de Composer pour organiser les classes dans plusieurs fichiers. Tu simuleras la structure du code d’un véritable projet PHP avec des espaces de noms PSR-4 et un chargeur automatique central.
Tu vas créer quatre fichiers qui fonctionnent ensemble :
src/Models/Product.php: définir une classeProductdans l’espace de nomsApp\Models. Elle doit posséder les propriétéspublic $nameetpublic $price, un constructeur qui accepte et définit ces deux valeurs, ainsi qu’une méthodegetInfo()qui renvoie"[name]: $[price]".src/Models/Customer.php: définir une classeCustomerdans l’espace de nomsApp\Models. Elle doit posséder une propriétépublic $name, un constructeur qui accepte et définit le nom, ainsi qu’une méthodegreet()qui renvoie"Welcome, [name]!".vendor/autoload.php: créer un chargeur automatique simple à l’aide despl_autoload_registerqui imite le comportement de Composer. Il doit associer le préfixe d’espace de nomsApp\au répertoiresrc/, convertir les séparateurs d’espace de noms en séparateurs de répertoires et ajouter.phppour charger le fichier correct.index.php: il s’agit de ton fichier d’entrée. Exiger le chargeur automatique depuisvendor/autoload.phpsur une seule ligne, puis utiliser le mot-cléusepour importerApp\Models\ProductetApp\Models\Customer. Créer unProductavec le nom"Laptop"et le prix999, ainsi qu’unCustomeravec le nom"Alice". Afficher 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 ton fichier index.php n’a besoin que d’une seule instruction require pour charger le chargeur automatique ; ensuite, toutes les classes sont chargées automatiquement lorsque tu les utilises. C’est exactement ainsi que fonctionnent les frameworks et les applications PHP modernes avec Composer.
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 customer
// TODO: Afficher le résultat de getInfo() du product
?>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
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition des méthodesLe mot-clé finalClasses abstraitesRécapitulatif – Hiérarchie des employés7Encapsulation
Public, Protected, PrivateModificateurs d’accès en profondeurAccesseurs et mutateursDissimulation de l’informationPromotion des constructeurs (8.0)Récapitulatif – Système de fiches étudiant10Concepts avancés de la POO
Composition ou héritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibres (PHP 8.1)Approfondissement du clonage d’objetsGénérateurs et itérateurs13Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron Dépôt2Espaces de noms et chargement automatique
Introduction aux espaces de nomsLe mot-clé useNorme de chargement automatique PSR-4Autoloader de ComposerRécapitulatif - Projet organisé5Interfaces et contrats
Introduction aux interfacesImplémentation des interfacesImplémentation de plusieurs interfacesInterface ou classe abstraiteIndication de type avec les interfacesRécapitulatif - Calculateur de formes8Méthodes magiques
Introduction aux méthodes magiques__toString et __debugInfo__get, __set, __isset, __unset__call et __callStatic__clone et clonage d’objets__serialize et __unserializeRécapitulatif - Collection personnalisée3Propriétés de classe
Propriétés d’instance vs statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés en lecture seule (PHP 8.1)Récapitulatif - Gestionnaire de comptes bancaires6Polymorphisme
Révision de la redéfinition des méthodesPolymorphisme via les interfacesAnnotations de type et types unionLiaison statique tardiveRécapitulatif - Processeur de paiements9Traits
Introduction aux traitsUtilisation de plusieurs traitsRésolution des conflits entre traitsMéthodes abstraites dans les traitsTraits par rapport à l’héritage12Patrons de conception – Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur PHP en ligne