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 Autoloading automatisch zu handhaben. Composer liest die Konfiguration Ihres Projekts und generiert einen optimierten Autoloader, der den PSR-4-Standards entspricht.

Die Konfiguration befindet sich in einer composer.json-Datei im Stammverzeichnis Ihres Projekts. So definieren Sie die Autoloading-Regeln:

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

Dies teilt Composer mit, dass jede Klasse, die mit App\ beginnt, aus dem Verzeichnis src/ geladen werden soll. Nachdem dies eingerichtet wurde, generiert Composer die Autoloader-Dateien in einem Verzeichnis vendor/.

Um den Autoloader von Composer zu verwenden, benötigen Sie nur eine Zeile am Anfang Ihrer Einstiegsdatei:

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

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

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

Diese einzige require-Anweisung übernimmt das gesamte Laden von Klassen für Ihr gesamtes Projekt. Sie können bei Bedarf mehrere Namespace-Mappings definieren:

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

Wichtiger Punkt: Der Autoloader von Composer macht manuelle Datei-Includes überflüssig und gewährleistet ein konsistentes Laden von Klassen in Ihrem gesamten Projekt. Es ist der Standardansatz, der von praktisch allen modernen PHP-Anwendungen und Frameworks verwendet wird.

challenge icon

Aufgabe

Einfach

Lassen Sie uns eine kleine Anwendung erstellen, die den Autoloading-Ansatz von Composer nutzt, um Klassen über mehrere Dateien hinweg zu organisieren. Sie werden simulieren, wie ein echtes PHP-Projekt seinen Code mit PSR-4-Namespaces und einem zentralen Autoloader strukturiert.

Sie werden vier Dateien erstellen, die zusammenarbeiten:

  • src/Models/Product.php — Definieren Sie eine Product-Klasse im Namespace App\Models. Sie sollte die Eigenschaften public $name und public $price haben, einen Konstruktor, der beide Werte akzeptiert und setzt, sowie eine Methode getInfo(), die "[name]: $[price]" zurückgibt.
  • src/Models/Customer.php — Definieren Sie eine Customer-Klasse im Namespace App\Models. Sie sollte eine Eigenschaft public $name haben, einen Konstruktor, der den Namen akzeptiert und setzt, sowie eine Methode greet(), die "Welcome, [name]!" zurückgibt.
  • vendor/autoload.php — Erstellen Sie einen einfachen Autoloader mit spl_autoload_register, der das Verhalten von Composer nachahmt. Er sollte das Namespace-Präfix App\ auf das Verzeichnis src/ abbilden, Namespace-Separatoren in Verzeichnis-Separatoren umwandeln und .php anhängen, um die korrekte Datei zu laden.
  • index.php — Dies ist Ihre Einstiegsdatei. Binden Sie den Autoloader aus vendor/autoload.php mit einer einzigen Zeile ein und verwenden Sie dann das Schlüsselwort use, um sowohl App\Models\Product als auch App\Models\Customer zu importieren. Erstellen Sie ein Product mit dem Namen "Laptop" und dem Preis 999 sowie einen Customer mit dem Namen "Alice". Geben Sie das Ergebnis des Aufrufs von greet() für den Kunden und getInfo() für das Produkt aus (jeweils in einer eigenen Zeile).

Das Schlüsselkonzept hierbei ist, dass Ihre index.php nur eine einzige require-Anweisung benötigt, um den Autoloader zu laden — danach werden alle Klassen automatisch geladen, wenn Sie sie verwenden. Genau so arbeiten moderne PHP-Frameworks und Anwendungen mit Composer.

Spickzettel

Composer automatisiert das Laden von Klassen, indem es eine composer.json Konfigurationsdatei liest und einen optimierten Autoloader generiert, der den PSR-4-Standards folgt.

Definieren Sie Autoloading-Regeln in der composer.json:

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

Dies ordnet den App\ Namespace dem src/ Verzeichnis zu. Composer generiert Autoloader-Dateien in einem vendor/ Verzeichnis.

Verwenden Sie den Autoloader von Composer mit einer einzigen require-Anweisung:

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

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

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

Definieren Sie bei Bedarf mehrere Namespace-Mappings:

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

Der Autoloader von Composer macht manuelle Datei-Includes überflüssig und ist der Standardansatz in modernen PHP-Anwendungen.

Probier es selbst

<?php
// TODO: Binde den Autoloader aus 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 Kunden aus

// TODO: Gib das Ergebnis von getInfo() des Produkts 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