在使用ThinkPHP框架時,查看他的原始碼有用到__autoload和apl_autoload_register這兩個函數,而這兩個函數就是用來進行自動載入的。其主要作用就算,當你的原始碼檔案使用了還沒有載入的文件,就會觸發這兩個函數來進行載入這個沒有載入的檔案
php的__autoload函數是一個魔術函數,在這個函數出現之前,如果一個php檔案裡引用了100個對象,那麼這個文件就需要使用include或require引進100個類別文件,這將導致該php檔案無比龐大。於是就有了這個 __autoload函數。
當php檔案中使用了new關鍵字實例化一個物件時,如果該類別沒有在本php檔案中被定義,將會觸發__autoload函數,此時,就可以引進定義該類別的php文件,爾後,就能實例化成功了。 (注意:如果需要實例化的對象,在本文件中已經找到該類的定義的話,就不會觸發__autoload函數)
#Animal.php<?php class Animal{}?>
#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();?>
如上述兩個文件,運行php main.php
(1)執行到new Animal()時,發現class Animal沒有定義;
(2)觸發了__autoload函數,該函數引進了Animal.php檔案;
(3)實例化成功。
好了,了解完了__autoload函數的作用,再來看看spl_autoload_register函數的作用。
spl_autoload_register函數的作用就是將自訂函數設定替換為__autoload函數(注意:當檔案中同時出現__autoload和spl_autoload_register時,以spl_autoload_register為準)
那麼將main.php改為如下也有同樣的功能:
#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();?>
在使用ThinkPHP框架時,檢視他的原始碼有用到__autoload和apl_autoload_register這兩個函數,而這兩個函數就是用來進行自動載入的,資料來源https://blog.csdn.net/gavin_new/article/details/52805811
其主要作用就算,當你的源碼檔案使用了還沒有加載的文件,就會觸發這兩個函數來進行加載這個沒有載入的檔案
php的__autoload函數是一個魔術函數,在這個函數出現之前,如果一個php檔案裡引用了100個對象,那麼這個檔案就需要使用include或require引進100個類文件,這將導致該php文件無比龐大。於是就有了這個 __autoload函數。
當php檔案中使用了new關鍵字實例化一個物件時,如果該類別沒有在本php檔案中被定義,將會觸發__autoload函數,此時,就可以引進定義該類別的php文件,爾後,就能實例化成功了。 (注意:如果需要實例化的對象,在本文件中已經找到該類的定義的話,就不會觸發__autoload函數)
#Animal.php<?php class Animal{}?>
#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();?>
如上述兩個文件,運行php main.php
(1)執行到new Animal()時,發現class Animal沒有定義;
(2)觸發了__autoload函數,該函數引進了Animal.php檔案;
(3)實例化成功。
好了,了解完了__autoload函數的作用,再來看看spl_autoload_register函數的作用。
spl_autoload_register函數的作用就是將自訂函數設定替換為__autoload函數(注意:當檔案中同時出現__autoload和spl_autoload_register時,以spl_autoload_register為準)
那麼將main.php改為如下也有同樣的作用:
#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();?>
以上是詳解兩種PHP之自動載入函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!