Composer-Autoloader
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 13 von 91.
Das Schreiben eines eigenen Autoloaders funktioniert, aber echte PHP-Projekte verwenden Composer, um das automatische Autoloading zu übernehmen. Composer liest die Konfiguration deines Projekts und generiert einen optimierten Autoloader, der den PSR-4-Standards folgt.
Die Konfiguration befindet sich in einer composer.json-Datei im Stammverzeichnis deines Projekts. So definierst du die Regeln für das automatische Laden:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}Dies teilt Composer mit, dass jede Klasse, die mit App\ beginnt, aus dem Verzeichnis src/ geladen werden soll. Nach dieser Einrichtung generiert Composer die Autoloader-Dateien in einem Verzeichnis vendor/.
Um den Autoloader von Composer zu verwenden, brauchst du am Anfang deiner Einstiegsdatei nur eine Zeile:
<?php
require 'vendor/autoload.php';
use App\Models\User;
use App\Services\Logger;
$user = new User("Alice");
$logger = new Logger();
Diese einzelne require-Anweisung übernimmt das Laden aller Klassen für dein gesamtes Projekt. Bei Bedarf kannst du mehrere Namespace-Zuordnungen definieren:
{
"autoload": {
"psr-4": {
"App\\": "src/",
"Tests\\": "tests/"
}
}
}Wichtiger Punkt: Der Autoloader von Composer macht manuelle Dateieinbindungen überflüssig und gewährleistet ein konsistentes Laden von Klassen in deinem gesamten Projekt. Er ist der Standardansatz, der von praktisch allen modernen PHP-Anwendungen und -Frameworks verwendet wird.
Aufgabe
EinfachErstellen wir eine kleine Anwendung, die Composers Autoloading-Ansatz verwendet, um Klassen über mehrere Dateien hinweg zu organisieren. Du simulierst, wie ein echtes PHP-Projekt seinen Code mit PSR-4-Namespaces und einem zentralen Autoloader strukturiert.
Du erstellst vier Dateien, die zusammenarbeiten:
src/Models/Product.php: Definiere eineProduct-Klasse imApp\Models-Namespace. Sie sollte über die Eigenschaftenpublic $nameundpublic $price, einen Konstruktor, der beide Werte entgegennimmt und setzt, sowie einegetInfo()-Methode verfügen, die"[name]: $[price]"zurückgibt.src/Models/Customer.php: Definiere eineCustomer-Klasse imApp\Models-Namespace. Sie sollte über einepublic $name-Eigenschaft, einen Konstruktor, der den Namen entgegennimmt und setzt, sowie einegreet()-Methode verfügen, die"Welcome, [name]!"zurückgibt.vendor/autoload.php: Erstelle einen einfachen Autoloader mitspl_autoload_register, der Composers Verhalten nachahmt. Er sollte das Namespace-PräfixApp\dem Verzeichnissrc/zuordnen, Namespace-Trennzeichen in Verzeichnistrennzeichen umwandeln und.phpanhängen, um die richtige Datei zu laden.index.php: Dies ist deine Einstiegspunktdatei. Binde den Autoloader ausvendor/autoload.phpmit einer einzigen Zeile ein und verwende dann dasuse-Schlüsselwort, um sowohlApp\Models\Productals auchApp\Models\Customerzu importieren. Erstelle einProductmit dem Namen"Laptop"und dem Preis999sowie einenCustomermit dem Namen"Alice". Gib das Ergebnis des Aufrufs vongreet()für den Kunden und vongetInfo()für das Produkt aus (jeweils in einer eigenen Zeile).
Das zentrale Konzept hierbei ist, dass deine index.php nur eine require-Anweisung benötigt, um den Autoloader zu laden. Danach werden alle Klassen automatisch geladen, sobald du sie verwendest. Genau so funktionieren moderne PHP-Frameworks und -Anwendungen mit Composer.
Probier es selbst
<?php
// TODO: Binde den Autoloader von vendor/autoload.php ein
// TODO: Verwende das 'use'-Schlüsselwort, um App\Models\Product zu importieren
// TODO: Verwende das 'use'-Schlüsselwort, um App\Models\Customer zu importieren
// TODO: Erstelle ein Product mit dem Namen "Laptop" und dem Preis 999
// TODO: Erstelle einen Customer mit dem Namen "Alice"
// TODO: Gib das Ergebnis von greet() des Customers aus
// TODO: Gib das Ergebnis von getInfo() des Products aus
?>Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in OOPKlassen vs. ObjekteDas Schlüsselwort $thisMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick – Einfacher Taschenrechner4Vererbung
Grundlegende VererbungDas Schlüsselwort parent::MethodenüberschreibungDas Schlüsselwort finalAbstrakte KlassenRückblick – Mitarbeiterhierarchie7Kapselung
Öffentlich, geschützt, privatZugriffsmodifikatoren im DetailGetter und SetterInformationsverbergungKonstruktor-Promotion (8.0)Wiederholung – System zur Verwaltung von Schülerdatensätzen2Namespaces & Autoloading
Einführung in NamespacesDas use-SchlüsselwortPSR-4-Autoloading-StandardComposer-AutoloaderRückblick – Organisiertes Projekt5Schnittstellen & Verträge
Einführung in SchnittstellenSchnittstellen implementierenMehrere Schnittstellen implementierenSchnittstelle vs. abstrakte KlasseTyp-Hinweise mit SchnittstellenRückblick – Formrechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objektklonen__serialize & __unserializeRückblick – Benutzerdefinierte Sammlung11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenBenutzerdefinierte Exception-HierarchieTry, Catch, FinallyRückblick – Formularvalidator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klassen-Eigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenSchreibgeschützte Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphie
Methodenüberschreibung erneut betrachtetPolymorphie über SchnittstellenTyp-Hinweise & Union-TypenSpätes statisches BindenRückblick – Zahlungsabwickler9Traits
Einführung in TraitsMehrere Traits verwendenAuflösung von Trait-KonfliktenAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungÜbe selbstständig: Online-PHP-Compiler