Signatur
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
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);
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);
// 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.