Start · Sprachen · PHP · Referenz · spl_autoload

spl_autoload

Funktion

Standardimplementierung für den Autoloader, die eine Klasse anhand ihres Namens in den registrierten Include-Verzeichnissen sucht und lädt.

seit PHP 5.1.2 Kategorie: oop

Signatur

spl_autoload(string $class, string $file_extensions = ''): void

Beschreibung

spl_autoload() ist die eingebaute Standardimplementierung des SPL-Autoloaders. Wird sie über spl_autoload_register() ohne Angabe einer eigenen Callback-Funktion registriert, übernimmt PHP diese Funktion automatisch als Autoload-Handler.

Die Funktion konvertiert den Klassennamen in Kleinbuchstaben und sucht anschließend in allen über set_include_path() oder spl_autoload_extensions() konfigurierten Verzeichnissen und Dateiendungen nach einer passenden Datei. Standardmäßig werden die Endungen .php und .inc verwendet.

Der zweite Parameter $file_extensions erlaubt es, abweichende Dateiendungen als kommaseparierte Liste direkt für diesen Aufruf zu übergeben, ohne die globale Konfiguration zu verändern.

Hinweis: Für moderne PHP-Projekte empfiehlt sich die Verwendung von Composer mit PSR-4-Autoloading anstelle des direkten Einsatzes von spl_autoload(), da dieser nur einfache, flache Klassenstrukturen gut unterstützt.

Parameter

Name Typ Default Beschreibung
$class Pflicht string Der Name der zu ladenden Klasse (ohne führenden Backslash). Der Name wird intern in Kleinbuchstaben konvertiert, bevor nach der Datei gesucht wird.
$file_extensions string Kommaseparierte Liste von Dateiendungen (z. B. '.php,.inc'), die für diesen Aufruf genutzt werden. Ist der Parameter leer oder nicht angegeben, werden die globalen Endungen aus spl_autoload_extensions() verwendet.

Rückgabewert

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück. Kann die Datei nicht gefunden oder geladen werden, wird eine Exception ausgelöst.

Beispiele

spl_autoload als Standard-Autoloader registrieren

<?php
// spl_autoload als Standard-Autoloader registrieren
// (ohne Callback wird spl_autoload() automatisch verwendet)
spl_autoload_register();

// Suchpfad konfigurieren
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ . '/classes');

// Dateiendungen festlegen
spl_autoload_extensions('.php,.class.php');

// Klasse verwenden — PHP sucht automatisch nach classes/myclass.php
// oder classes/myclass.class.php
$obj = new MyClass();
echo get_class($obj);
MyClass

spl_autoload direkt aufrufen mit eigener Dateiendung

<?php
// Include-Pfad setzen
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ . '/lib');

// spl_autoload direkt aufrufen und spezifische Endung angeben
// Sucht nach lib/logger.php
try {
    spl_autoload('Logger', '.php');
    $logger = new Logger();
    $logger->log('Anwendung gestartet');
} catch (Exception $e) {
    echo 'Klasse konnte nicht geladen werden: ' . $e->getMessage();
}

spl_autoload explizit als Callback registrieren

<?php
// spl_autoload explizit als Callback registrieren
spl_autoload_register('spl_autoload');

// Pfad und Endungen konfigurieren
set_include_path(__DIR__ . '/models');
spl_autoload_extensions('.php');

// Klasse 'UserModel' wird gesucht in models/usermodel.php (Kleinbuchstaben!)
$user = new UserModel();
var_dump($user instanceof UserModel);
bool(true)

// Wichtig · Fallstricke

Achtung — Kleinbuchstaben-Konvertierung: spl_autoload() wandelt den Klassennamen intern in Kleinbuchstaben um. Das bedeutet, dass die zugehörigen Dateien auf Dateisystemen mit Groß-/Kleinschreibung (Linux) ebenfalls in Kleinbuchstaben benannt sein müssen. Unter Windows ist dies unproblematisch, da das Dateisystem keine Groß-/Kleinschreibung unterscheidet.

Namespace-Unterstützung: Namespace-Trennzeichen (\) werden von spl_autoload() nicht in Verzeichnistrennzeichen umgewandelt. Für namespaced Klassen ist daher ein benutzerdefinierter Autoloader oder Composer mit PSR-4 zu bevorzugen.

Deprecation: Die frühere globale Funktion __autoload() ist seit PHP 7.2 als veraltet markiert und wurde in PHP 8.0 entfernt. spl_autoload_register() sollte stattdessen verwendet werden.