php自動載入機制的實現

2021-08-23 14:11:23 字數 2722 閱讀 3053

自動載入就是當我們在當前檔案中例項化乙個不存在的類時,呼叫自動載入機制引入相應的類檔案。

注:自動載入有兩種方式(都是php內建的),一種是通過__autoload(),另一種是通過spl_autoload_register()。

以下兩種方式的介紹中,都是執行test3.php檔案。

/data/www/test2/test2.php

<?php

class test2

static function bb()

}

/data/www/test3.php

<?php

//載入過程

//1、例項化test2類,由於當前檔案不存在test2類,所以會自動執行__autoload()方法,並自動將類名傳過去

//2、執行完__autoload()方法之後,會載入test2/test2.php檔案

//3、由於當前檔案已經通過__autoload()方式require進檔案test2.php了,所以也就可以呼叫test2.php中的方法了

$test = new test2();

$test->aa();//呼叫aa方法

test2::bb();//呼叫bb靜態類方法

function __autoload($class)

注:由於__autoload()自動載入方式已經逐漸被php官方廢棄了,所以這裡採用另一種方式spl_autoload_register來實現。

這裡,test2.php檔案和上面一樣,只改變test3.php檔案。

/data/www/test3.php

<?php

//載入過程

//1、例項化test2類時,由於當前檔案並沒有test2類,所以php會自動呼叫spl_autoload_register自動載入機制

//2、呼叫spl_autoload_register,就會呼叫我們自己定義的autoload_test()方法

//3、進而引入了相應的test2.php類檔案

//4、引入了相應的類檔案之後,自然也就可以例項化類,並呼叫相應的方法了

spl_autoload_register(autoload_test);

$test = new test2();

$test->aa();//呼叫aa方法

test2::bb();//呼叫bb靜態類方法

/** * 用於實現自動載入

* @param $class

*/function autoload_test($class)

spl_autoload_register()相比於__autoload()的優點在於:

(1)可以按需多次寫spl_autoload_register註冊載入函式,載入順序按誰先註冊誰先呼叫。__aotuload由於是全域性函式只能定義一次,不夠靈活。

比如下面,由於需要同時載入test2.php 以及 test4.class.php,__autoload就實現不了這個需求,而使用spl_autoload_register來實現就比較合適。

test4.class.php

<?php

class test4

}

test3.php

<?php

//載入過程

//1、例項化test2類時,由於當前檔案並沒有test2類,所以php會自動呼叫spl_autoload_register自動載入機制

//2、呼叫spl_autoload_register,就會呼叫我們自己定義的autoload_test()方法

//3、進而引入了相應的test2.php類檔案

//4、之後又例項化了test4類,test4類在當前檔案同樣沒有,這時php會自動呼叫spl_autoload_register自動載入機制

首先呼叫第乙個註冊自動載入函式spl_autoload_register(autoload_test),載入之後沒有找到test4類

所以php會繼續呼叫第二個自動註冊函式spl_autoload_register(autoload_test4)

這時,終於找到test4類了,也就不用繼續在往下找了

//5、引入了相應的類檔案之後,自然也就可以例項化類,並呼叫相應的方法了

spl_autoload_register(autoload_test);

spl_autoload_register(autoload_test4);

$test = new test2();

$test->aa();//呼叫aa方法

test2::bb();//呼叫bb靜態類方法

$test4 = new test4();

$test4->dd();

/** * 用於實現自動載入

* @param $class

*/function autoload_test($class)

function autoload_test4($class)

(2)spl_autoload_register()可以被catch到錯誤,而__aotuload不能。

(3)spl_autoload_register註冊的載入函式可以按需被spl_autoload_unregister掉

還有,值得注意的是,如果對類檔案加入了命名空間,就必須保證正確的載入了類檔案的同時,還要通過use引入對應的命名空間。

php自動載入機制的實現

自動載入就是當我們在當前檔案中例項化乙個不存在的類時,呼叫自動載入機制引入相應的類檔案。注 自動載入有兩種方式 都是php內建的 一種是通過 autoload 另一種是通過spl autoload register 以下兩種方式的介紹中,都是執行test3.php檔案。data www test2 ...

PHP自動載入機制

自動載入機制的主要執行過程 1 檢查執行器全域性變數函式指標autoload func是否為null。2 如果autoload func null,則查詢系統中是否定義有 autoload 函式,如果沒有,則報告錯誤並退出。3 如果定義了 autoload 函式,則執行 autoload 嘗試載入類...

php 自動載入機制

一 基礎了解。1 php引入檔案使用include與require,這兩個的區別在於,include可以在 執行過程中再引入,而require是需要在 執行前就進行引入操作。2 命名空間。引入命名空間的作用是為了規避掉因為重名而引發的混亂與錯誤。可以把命名空間理解為乙個箱子,不同的箱子都可以有蘋果,...