PHP如何自動載入__autoload和apl_autoload_register這兩個函數?

jacklove
發布: 2023-03-27 12:30:02
原創
1380 人瀏覽過

本文將介紹如何透過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的錯誤處理及實作方法

#PHP取得多維數組指定的值在陣列第幾列?

php基礎學習:PHP陣列與資料結構

#

以上是PHP如何自動載入__autoload和apl_autoload_register這兩個函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!