Ich habe ein Skript, das autoload
verwendet, um Klassen zu laden, die nicht gefunden werden. Ich nehme die Datei nicht absichtlich auf (obwohl ich kann), aber ich möchte, dass die Autoload-Funktion die erforderlichen Dateien enthält.
Da das Skript rekursiv sein kann, das heißt, wenn die Klasse bereits geladen ist, möchte ich nicht überprüfen, ob die entsprechende Datei geladen ist und ob class_exists
bei jeder Rekursion des Skripts.
Wenn Sie __autoload
vermeiden möchten, können Sie anstelle von require_once
include
verwenden.
Der Leistungseinbußen bei der Verwendung von __autoload
kann beträchtlich sein, insbesondere weil einige Opcode-Caches dies nicht richtig unterstützen. Aber wenn es sehr praktisch ist, würde ich sagen, es sei denn, Ihr Opcode-Cache speichert keine Autoload-Includes.
Wenn Sie Ihren Autoloader so eingerichtet haben, dass er Ihre Klassen lädt und nicht require
(usw.) verwendet, wird der Autoloader nur aufgerufen, wenn auf eine Klasse verwiesen wird, die nicht existiert. Es ist also nie notwendig, class_exists
im Autoloader zu überprüfen (es wird nicht aufgerufen, wenn die Klasse existiert).
In Bezug auf die Leistung. Wenn Sie große Bibliotheken verwenden, kann Autoload tatsächlich schneller sein, da nur die benötigten Dateien / Klassen geladen werden. Wie auch immer, der Geschwindigkeitshit ist meiner Erfahrung nach ziemlich vernachlässigbar (benutze immer einen Opcode-Cache, wie andere bereits erwähnt haben).