Also, so funktioniert es intern.
Wenn Sie versuchen, eine Klasse zu verwenden, die nicht existiert, ruft sie jede der spl_autoload
Rückrufe einen nach dem anderen, bis die Klasse existiert (und die __autoload
Funktion ist eine von ihnen). Wenn sie am Ende der Kette nicht vorhanden ist, wird der Fehler "Klasse nicht gefunden" ausgegeben.
Wenn Sie anrufen class_exists
ohne den zweiten Parameter (der ihm sagt, dass er nicht versuchen soll, es zu laden, wenn es nicht existiert), ruft er die Kette von spl_autoload
Rückrufe, bis entweder die Klasse gefunden oder die letzte Methode aufgerufen wird. Dann kehrt es zurück, wenn es die Klasse gefunden hat.
Es hängt also alles davon ab, was Sie in der Autoload-Funktion tun. Wenn Sie etwas tun wie:
function __autoload($class) {
$filename = PATH_TO_CLASSES . $class . '.php';
if (!file_exists($class)) {
die('Could not find '.$class);
}
require_once $filename;
}
Es wird die Ausführung verhindern und nicht wie vorgesehen funktionieren. Stattdessen sollten Sie dies tun:
function __autoload($class) {
$filename = PATH_TO_CLASSES . $class . '.php';
if (file_exists($class)) {
require_once $filename;
}
}
Das ist alles, was Sie tun müssen.
Sie wollen nicht, dass die Datei ausgeführt wird. Das ist auch in Ordnung. Dafür gibt es eine einfache Lösung. Legen Sie diese Datei nicht in dasselbe Verzeichnis wie Ihre automatisch geladenen Klassen. Das macht den Zweck des Autoloadings zunichte.
Die einzige andere Lösung wäre, eine Zuordnung von Klassennamen zu Dateinamen zu speichern und das Autoloading darauf aufzubauen. Andernfalls würde es immer die Datei ausführen (da das ist, was Sie bitten, es zu tun) ...