Ausführliche Erklärung zweier automatischer Ladefunktionen von PHP

零到壹度
Freigeben: 2023-03-23 15:34:01
Original
2097 Leute haben es durchsucht

Bei Verwendung des ThinkPHP-Frameworks ist es nützlich, beim Anzeigen des Quellcodes die beiden Funktionen __autoload und apl_autoload_register anzuzeigen, und diese beiden Funktionen werden zum automatischen Laden verwendet. Seine Hauptfunktion besteht darin, dass, wenn Ihre Quellcodedatei eine Datei verwendet, die nicht geladen wurde, diese beiden Funktionen ausgelöst werden, um die entladene Datei zu laden.

Die __autoload-Funktion von PHP ist eine magische Funktion, bevor diese Funktion erschien Wenn in einer PHP-Datei auf 100 Objekte verwiesen wird, müsste die Datei „include“ oder „require“ verwenden, um 100 Klassendateien einzuführen, was dazu führen würde, dass die PHP-Datei extrem groß wird. Es gibt also diese __autoload-Funktion.

Wann wird die __autoload-Funktion aufgerufen?

Wenn das neue Schlüsselwort zum Instanziieren eines Objekts in einer PHP-Datei verwendet wird und die Klasse in dieser PHP-Datei nicht definiert ist, wird die Funktion __autoload ausgelöst. Zu diesem Zeitpunkt können Sie die Definition des einführen Klasse PHP-Datei, und dann kann sie erfolgreich instanziiert werden. (Hinweis: Wenn das Objekt, das instanziiert werden muss, die Definition der Klasse in dieser Datei gefunden hat, wird die Funktion __autoload nicht ausgelöst.)

#Animal.php<?php
   class Animal{}?>
Nach dem Login kopieren
Nach dem Login kopieren
#main.php<?php
  function __autoload($classname){
     $classpath = "{$classname}.php";     if(file_exists($classpath)){         require_once($classpath);
     }else{         echo $classpath." not be found!";
     }
  }  $ani = new Animal();?>
Nach dem Login kopieren
Nach dem Login kopieren

Führen Sie wie in den beiden oben genannten Dateien PHP aus main.php
(1) Beim Ausführen von new Animal() wird festgestellt, dass die Klasse Animal nicht definiert ist;
(2) Die Funktion __autoload wird ausgelöst, die die Datei Animal.php einführt; (3) Instanziierung erfolgreich.
Okay, nachdem Sie nun die Rolle der __autoload-Funktion verstanden haben, werfen wir einen Blick auf die Rolle der spl_autoload_register-Funktion.
Die Rolle der Funktion spl_autoload_register besteht darin, die benutzerdefinierten Funktionseinstellungen durch die Funktion __autoload zu ersetzen (Hinweis: Wenn __autoload und spl_autoload_register gleichzeitig in der Datei erscheinen, hat spl_autoload_register Vorrang).
Dann wird main.php in geändert Folgendes hat den gleichen Effekt:

#main.php<?php
  function myLoad($classname){
     $classpath = "{$classname}.php";     if(file_exists($classpath)){         require_once($classpath);
     }else{         echo $classpath." not be found!";
     }
  }
  spl_autoload_register("myLoad");  $ani = new Animal();?>
Nach dem Login kopieren
Bei Verwendung des ThinkPHP-Frameworks ist es hilfreich, den Quellcode zu überprüfen, um die beiden Funktionen __autoload und apl_autoload_register zu verwenden. Diese beiden Funktionen werden zum automatischen Laden verwendet. , Datenquelle https://blog.csdn.net/gavin_new/article/details/52805811

Seine Hauptfunktion besteht darin, dass diese beiden Funktionen ausgelöst werden, wenn Ihre Quellcodedatei eine Datei verwendet, die nicht geladen wurde Diese entladene Datei

Die __autoload-Funktion von PHP ist eine magische Funktion. Wenn in einer PHP-Datei auf 100 Objekte verwiesen wird, muss die Datei mit 100 Klassendateien eingeführt werden Dies führt dazu, dass die PHP-Datei extrem groß wird. Es gibt also diese __autoload-Funktion.

Wann wird die __autoload-Funktion aufgerufen?

Wenn das Schlüsselwort new zum Instanziieren eines Objekts in einer PHP-Datei verwendet wird und die Klasse in dieser PHP-Datei nicht definiert ist, wird die Funktion __autoload ausgelöst. Zu diesem Zeitpunkt können Sie die Definition des einführen Klasse PHP-Datei, und dann kann sie erfolgreich instanziiert werden. (Hinweis: Wenn das Objekt, das instanziiert werden muss, die Definition der Klasse in dieser Datei gefunden hat, wird die Funktion __autoload nicht ausgelöst.)

Führen Sie wie in den beiden oben genannten Dateien PHP aus main.php
#Animal.php<?php
   class Animal{}?>
Nach dem Login kopieren
Nach dem Login kopieren
(1) Beim Ausführen von new Animal() wird festgestellt, dass die Klasse Animal nicht definiert ist;
#main.php<?php
  function __autoload($classname){
     $classpath = "{$classname}.php";     if(file_exists($classpath)){         require_once($classpath);
     }else{         echo $classpath." not be found!";
     }
  }  $ani = new Animal();?>
Nach dem Login kopieren
Nach dem Login kopieren
(2) Die Funktion __autoload wird ausgelöst, die die Datei Animal.php einführt; (3) Instanziierung erfolgreich.

Okay, nachdem Sie nun die Rolle der __autoload-Funktion verstanden haben, werfen wir einen Blick auf die Rolle der spl_autoload_register-Funktion.
Die Rolle der Funktion spl_autoload_register besteht darin, die benutzerdefinierten Funktionseinstellungen durch die Funktion __autoload zu ersetzen (Hinweis: Wenn __autoload und spl_autoload_register gleichzeitig in der Datei erscheinen, hat spl_autoload_register Vorrang).
Dann wird main.php in geändert Folgende Funktion hat den gleichen Effekt:

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zweier automatischer Ladefunktionen von PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!