Ok, also hier ist, wie es intern funktioniert. Wenn Sie versuchen, eine Klasse zu verwenden, die nicht existiert, ruft sie nacheinander alle spl_autoload
Callbacks auf, bis die Klasse existiert (und die __autoload
Funktion ist eine davon). Wenn es am Ende der Kette nicht existiert, wird der Fehler Klasse nicht gefunden ausgelöst.
Wenn Sie class_exists
ohne den zweiten Parameter nennen (was es nicht zu versuchen, erzählt zu laden, wenn es nicht vorhanden ist), ruft er die Kette von spl_autoload
Rückrufen bis er entweder die Klasse findet, oder die letzte Methode wird aufgerufen, . 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 Ausführung beenden und es wird nicht wie vorgesehen funktionieren. Stattdessen sollten Sie 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.
Jetzt möchten Sie nicht, dass die Datei ausgeführt wird. Das ist gut. Dafür gibt es eine einfache Lösung. Legen Sie diese Datei nicht in dasselbe Verzeichnis wie Ihre automatisch geladenen Klassen. Es vereitelt den Zweck des Autoloading.
Die einzige andere Lösung wäre, eine Zuordnung von Klassennamen zu Dateinamen zu speichern und daraus das Autoloading abzuleiten. Sonst würde es immer die Datei ausführen (da das ist was du verlangst) ...
obviusly ist notwendig, automatischen Laden zu verwenden, da die Klasse nicht geladen wird! –
Zeigen Sie Ihre Autoload-Funktion ... Es sollte 'ClassName existiert nicht ....' nach dem 'Dies wird alle abstürzen 'angezeigt werden, da es nicht wichtig ist, wenn die Klasse nicht geladen wird. Ich vermute, dass Sie die Ausführung in der "__autoload" -Funktion töten, wenn Sie die Klasse nicht finden, und Sie sollten nicht ... – ircmaxell
Aus dem Code, der gegeben wird, können die Ergebnisse nicht reproduziert werden. Also poste etwas mehr Code. – tplaner