Was ist Autoloading? Wie benutzt du spl_autoload, __autoload und spl_autoload_register?

Ich lerne fortgeschrittene PHP-Standards und versuche neue und nützliche Methoden zu implementieren. Früher benutzte ich __autoload nur um zu entkommen, einschließlich mehrerer Dateien auf jeder Seite, aber kürzlich habe ich einen Tipp auf __autoload manual

spl_autoload_register () bietet eine flexiblere Alternative für das automatische Laden von classn. Aus diesem Grund wird davon abgeraten, __autoload () zu verwenden, und es könnte in der Zukunft veraltet oder entfernt werden.

aber ich kann wirklich nicht herausfinden, wie man spl_autoload und spl_autoload_register

Solutions Collecting From Web of "Was ist Autoloading? Wie benutzt du spl_autoload, __autoload und spl_autoload_register?"

spl_autoload_register() erlaubt es Ihnen, mehrere functionen (oder statische Methoden aus Ihrer eigenen Autoload-class) zu registrieren, die PHP in einen Stack / Queue legt und sequentiell aufruft, wenn eine “neue class” deklariert wird.

Also zum Beispiel:

 spl_autoload_register('myAutoloader'); function myAutoloader($className) { $path = '/path/to/class'; include $path.$className.'.php'; } //------------------------------------- $myClass = new MyClass(); 

Im obigen Beispiel ist “MyClass” der Name der class, die Sie instanziieren spl_autoload_register() PHP übergibt diesen Namen als String an spl_autoload_register() , mit dem Sie die Variable übernehmen und verwenden können, um das entsprechende ” spl_autoload_register() ” class / Datei. Daher müssen Sie diese class nicht unbedingt über eine include / require-statement hinzufügen …

Rufen Sie einfach die class auf, die Sie instanziieren möchten, wie im obigen Beispiel, und da Sie eine function (über spl_autoload_register() ) registriert haben, die herausfinden wird, wo sich Ihre class befindet, wird PHP diese function verwenden.

Der Vorteil von spl_autoload_register() besteht darin, dass Sie im Gegensatz zu __autoload() keine Autoload-function in jeder von Ihnen erstellten Datei implementieren müssen. spl_autoload_register() ermöglicht es Ihnen auch, mehrere Autoload-functionen zu registrieren, um das spl_autoload_register() zu beschleunigen und es noch einfacher zu machen.

Beispiel:

 spl_autoload_register('MyAutoloader::ClassLoader'); spl_autoload_register('MyAutoloader::LibraryLoader'); spl_autoload_register('MyAutoloader::HelperLoader'); spl_autoload_register('MyAutoloader::DatabaseLoader'); class MyAutoloader { public static function ClassLoader($className) { //your loading logic here } public static function LibraryLoader($className) { //your loading logic here } 

In Bezug auf spl_autoload besagt das Handbuch:

Diese function soll als Standardimplementierung für __autoload() . Wenn nichts anderes angegeben ist und spl_autoload_register() ohne Parameter aufgerufen wird, werden diese functionen für jeden späteren Aufruf von __autoload() .

Praktischer ausgedrückt: Wenn sich alle Ihre Dateien in einem einzigen Verzeichnis befinden und Ihre Anwendung nicht nur .php-Dateien, sondern auch benutzerdefinierte Konfigurationsdateien mit .inc-Erweiterungen verwendet, können Sie zum Beispiel Ihr Verzeichnis mit allen Dateien hinzufügen Dateien in den Include-Pfad von PHP (über set_include_path() ).
Und da Sie auch Ihre Konfigurationsdateien benötigen, verwenden Sie spl_autoload_extensions() um die Erweiterungen spl_autoload_extensions() nach denen PHP suchen soll.

Beispiel:

 set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/'); spl_autoload_extensions('.php, .inc'); spl_autoload_register(); 

Da spl_autoload die Standardimplementierung der magischen Methode __autoload() ist, ruft PHP spl_autoload auf, wenn Sie versuchen und eine neue class instanziieren.

Hoffe das hilft…

Seit PHP 5.3 können Sie spl_autoload_register() mit Namespaces verwenden, was bedeutet, dass Sie Ihr Projekt organisieren und Ihre PHP-classn __autoload() ohne dass Sie eine __autoload() -function definieren oder neu definieren __autoload() .

Um dieses Verhalten zu demonstrieren, erstellen Sie einfach eine Datei namens index.php:

 < ?php spl_autoload_register(); var_dump(new Main\Application); 

Erstellen Sie dann einen Ordner namens Main, der sich direkt neben der Datei index.php befindet. Schließlich erstellt eine Datei mit dem Namen Application.php in Main und fügt den folgenden Code ein:

 < ?php namespace Main; class Application{}