Ich versuche, Autoloading meiner Klassen zu implementieren. Ich trenne meine Klassen in zwei verschiedenen Ordnern:PHP: spl_autoload_register versucht, Dateien aus falschem Verzeichnis zu laden
/classes
/external
In meinem external
Ordner, halte ich alles von Drittanbietern, die ich in meiner Anwendung verwende. Es kann Klassen, Funktionen usw. enthalten. Ich halte das gerne getrennt von meinem eigenen Code.
Ich möchte alles manuell in das external
Verzeichnis aufnehmen. Ich möchte nur, dass Dateien im Verzeichnis classes
automatisch geladen werden. Hier ist, was ich habe:
Dateien:
/classes/cache.class.php
/classes/db.class.php
/classes.mail.class.php
/external/hooks.php
und automatisch zu laden:
spl_autoload_register(function ($class_name) {
include dirname(__FILE__).'/classes/'.$class_name.'.class.php';
});
$Cache = new cache();
$Db = new db();
$Mail = new mail();
Irgendwie dies versucht, eine Klasse zu laden, die im external
Verzeichnis vorhanden ist. Ich weiß das, weil in hooks.php
ich habe:
class Hooks { ... } // Notice the capital H
Und ich erhalte die Fehlermeldung:
„Warning: include (/path/to/classes/Hooks.class.php): failed to open stream : Keine solche Datei oder kein Verzeichnis "
Wie kann ich spl_autoload_register
erhalten, um alle Klassen zu ignorieren, die außerhalb des Verzeichnisses classes
existieren?
Danke. Ich verstehe einfach nicht, warum es in anderen Verzeichnissen sucht und nicht in der angegebenen bleibt. Kannst du erklären warum? – JROB
Da Sie nicht den ganzen Code zeigen, insbesondere den Code, der 'spl_autoload_register' aufruft, kann ich Ihnen keine gute Antwort geben. Wahrscheinlich, was auch immer es anruft, hat eine voreingestellte Liste, um es zuerst zu versuchen. – Forbs