Signatur
Beschreibung
__autoload() ist eine globale Funktion, die PHP automatisch aufruft, sobald eine Klasse oder ein Interface instanziiert oder verwendet wird, die/das zu diesem Zeitpunkt noch nicht definiert ist. Der Name der fehlenden Klasse wird als Parameter übergeben, sodass die Funktion die entsprechende Datei per require oder include laden kann.
Der typische Anwendungsfall war das automatische Laden von Klassendateien nach einer bestimmten Namenskonvention (z. B. eine Klasse MyClass liegt in MyClass.php), ohne alle Klassen-Dateien manuell einbinden zu müssen. Dies war besonders vor der Verbreitung von Composer und PSR-4-Autoloading gängige Praxis.
Wichtig: __autoload() wurde mit PHP 7.2 als deprecated markiert und mit PHP 8.0 vollständig entfernt. Der empfohlene Ersatz ist spl_autoload_register(), das mehrere Autoloader gleichzeitig unterstützt und flexibler eingesetzt werden kann.
Da __autoload() nur eine einzige globale Funktion erlaubt, ist es nicht möglich, mehrere unabhängige Autoloader zu kombinieren – ein entscheidender Nachteil gegenüber spl_autoload_register().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $class Pflicht | string | Der vollständige Name der Klasse oder des Interfaces (inklusive Namespace-Präfix), die/das nicht gefunden wurde und geladen werden soll. |
Rückgabewert
__autoload() die gewünschte Klasse immer noch nicht definiert ist, wirft PHP einen fatalen Fehler.Beispiele
Einfacher Autoloader für Klassendateien (PHP 5/7)
<?php
function __autoload(string $class): void {
$file = __DIR__ . '/classes/' . $class . '.php';
if (file_exists($file)) {
require $file;
}
}
// PHP sucht jetzt automatisch nach /classes/UserRepository.php
$repo = new UserRepository();
echo get_class($repo);
Empfohlene Alternative: spl_autoload_register()
<?php
// Moderner Ersatz für __autoload() – unterstützt mehrere Autoloader
spl_autoload_register(function (string $class): void {
$file = __DIR__ . '/classes/' . $class . '.php';
if (file_exists($file)) {
require $file;
}
});
// Weiterer Autoloader kann problemlos registriert werden
spl_autoload_register(function (string $class): void {
$file = __DIR__ . '/lib/' . str_replace('\\', '/', $class) . '.php';
if (file_exists($file)) {
require $file;
}
});
$obj = new MyApp\Services\MailService();
echo get_class($obj);
// Wichtig · Fallstricke
Deprecation: __autoload() wurde in PHP 7.2 als veraltet markiert (deprecated) und in PHP 8.0 vollständig entfernt. Code, der diese Funktion verwendet, funktioniert unter PHP 8.0+ nicht mehr und wirft einen fatalen Fehler.
Wenn spl_autoload_register() und __autoload() gleichzeitig verwendet wurden, musste __autoload() explizit in die SPL-Autoload-Kette eingetragen werden, da sie sonst nicht automatisch aufgerufen wurde.
Für neue Projekte sollte ausschließlich spl_autoload_register() oder ein Composer-basierter PSR-4-Autoloader verwendet werden.