Menu
Coddy logo textTech

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.

challenge icon

Aufgabe

Einfach

Erstellen 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 eine Product-Klasse im App\Models-Namespace. Sie sollte über die Eigenschaften public $name und public $price, einen Konstruktor, der beide Werte entgegennimmt und setzt, sowie eine getInfo()-Methode verfügen, die "[name]: $[price]" zurückgibt.
  • src/Models/Customer.php: Definiere eine Customer-Klasse im App\Models-Namespace. Sie sollte über eine public $name-Eigenschaft, einen Konstruktor, der den Namen entgegennimmt und setzt, sowie eine greet()-Methode verfügen, die "Welcome, [name]!" zurückgibt.
  • vendor/autoload.php: Erstelle einen einfachen Autoloader mit spl_autoload_register, der Composers Verhalten nachahmt. Er sollte das Namespace-Präfix App\ dem Verzeichnis src/ zuordnen, Namespace-Trennzeichen in Verzeichnistrennzeichen umwandeln und .php anhängen, um die richtige Datei zu laden.
  • index.php: Dies ist deine Einstiegspunktdatei. Binde den Autoloader aus vendor/autoload.php mit einer einzigen Zeile ein und verwende dann das use-Schlüsselwort, um sowohl App\Models\Product als auch App\Models\Customer zu importieren. Erstelle ein Product mit dem Namen "Laptop" und dem Preis 999 sowie einen Customer mit dem Namen "Alice". Gib das Ergebnis des Aufrufs von greet() für den Kunden und von getInfo() 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
?>
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-PHP-Compiler