本文將介紹如何透過php自動載入__autoload和apl_autoload_register這兩個函數?
在使用ThinkPHP框架時,查看他的原始碼有用到__autoload和apl_autoload_register這兩個函數,而這兩個函數就是用來進行自動載入的
其主要作用就算,當你的原始碼檔案使用了還沒有載入的文件,就會觸發這兩個函數來進行載入這個沒有載入的檔案
php的__autoload函數是一個魔術函數,在這個函數出現之前,如果一個php檔案裡引用了100個對象,那麼這個文件就需要使用include或require引進100個類別文件,這將導致該php檔案無比龐大。於是就有了這個 __autoload函數。
__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自動載入__autoload和apl_autoload_register這兩個函數,更多相關內容請關注php中文網。
相關推薦:
#以上是PHP如何自動載入__autoload和apl_autoload_register這兩個函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!