PHP __autoload Leistung

8

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.

    
CoCoMo 26.07.2010, 00:51
quelle

2 Antworten

9

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.

    
Artefacto 26.07.2010, 00:53
quelle
6

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).

    
Brenton Alker 26.07.2010 01:06
quelle

Tags und Links