Signatur
Beschreibung
spl_autoload_call() durchläuft alle mit spl_autoload_register() registrierten Autoload-Funktionen und ruft sie nacheinander mit dem angegebenen Klassennamen auf, bis die Klasse erfolgreich geladen wurde. Sobald die Klasse nach einem Aufruf existiert, wird die Kette abgebrochen.
Die Funktion ist nützlich, wenn man den Autoload-Mechanismus manuell auslösen möchte, ohne dabei eine neue Instanz der Klasse zu erzeugen oder class_exists() mit dem zweiten Parameter true zu verwenden. Sie eignet sich besonders in Debugging-Szenarien oder wenn man prüfen möchte, ob eine Klasse über den Autoloader geladen werden kann.
Im Unterschied zu einem direkten Klassenaufruf wirft spl_autoload_call() keine Exception oder einen Fatal Error, wenn die Klasse nach dem Durchlaufen aller Autoloader immer noch nicht gefunden wird – sie gibt lediglich null zurück, ohne eine Fehlermeldung zu erzeugen. Das erlaubt eine sichere, kontrollierte Prüfung.
Hinweis: Ab PHP 8.0 ist die globale __autoload()-Funktion entfernt worden. Die SPL-Autoload-Kette über spl_autoload_register() ist der einzig gültige Weg, Autoloading zu implementieren.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $class_name Pflicht | string | Der vollständige Name der Klasse (inkl. Namespace), die geladen werden soll. Der Name wird an alle registrierten Autoload-Funktionen weitergereicht. |
Rückgabewert
Beispiele
Manuelles Auslösen des Autoloaders
<?php
spl_autoload_register(function (string $class): void {
$file = __DIR__ . '/classes/' . str_replace('\\', '/', $class) . '.php';
if (file_exists($file)) {
require $file;
}
});
// Klasse manuell laden, ohne eine Instanz zu erzeugen
spl_autoload_call('App\\Services\\MailService');
if (class_exists('App\\Services\\MailService', false)) {
echo 'Klasse wurde erfolgreich geladen.';
} else {
echo 'Klasse konnte nicht geladen werden.';
}
Autoloader-Kette mit mehreren registrierten Funktionen
<?php
// Erster Autoloader: lädt Klassen aus /lib
spl_autoload_register(function (string $class): void {
$file = __DIR__ . '/lib/' . $class . '.php';
if (file_exists($file)) {
require $file;
echo "Geladen von /lib: {$class}\n";
}
});
// Zweiter Autoloader: lädt Klassen aus /vendor
spl_autoload_register(function (string $class): void {
$file = __DIR__ . '/vendor/' . $class . '.php';
if (file_exists($file)) {
require $file;
echo "Geladen von /vendor: {$class}\n";
}
});
// Manuell alle Autoloader für 'Router' aufrufen
spl_autoload_call('Router');
// Prüfen ohne erneuten Autoload-Aufruf (zweites Argument = false)
var_dump(class_exists('Router', false));
// Wichtig · Fallstricke
Kein Fatal Error bei Misserfolg: Anders als beim normalen Klassenaufruf wird kein Fatal Error ausgelöst, wenn die Klasse nicht gefunden wird. Das Ergebnis muss daher mit class_exists($name, false) geprüft werden, wobei der zweite Parameter false verhindert, dass class_exists seinerseits wieder den Autoloader aufruft.
Deprecation von __autoload(): Die globale __autoload()-Funktion wurde in PHP 7.2 als veraltet markiert und in PHP 8.0 vollständig entfernt. Ausschließlich über spl_autoload_register() registrierte Funktionen werden von spl_autoload_call() berücksichtigt.
Namespace-Beachtung: Der Klassenname muss vollständig qualifiziert übergeben werden (z. B. App\Services\MailService), damit der Autoloader den richtigen Pfad ableiten kann.