PHP Autoload 機制

 

PHP autoload

在以面向對象的方式使用 php, 而且每個類單獨存在與一個文件中時, 如果每個類都寫個

 require 的方式來引入, 隨着程序的複雜性增加,這樣難免會成爲一件頭疼的事情.

 

PHP 的 autoload 機制很好的解決了這種情況, 可以不必對每個類都 require 一次. 在程

序找不到類聲明時會使用 autoload 將文件加載進來. autoload 的行爲是需要自己來定義的.

 

PHP 有兩種註冊 autoload 的方法, 第一中方法是聲明個 __autoload 函數;第二種是使用 SPL

中相關 autoload 函數.

 

 

 

 

使用 __autoload 函數方式:

說明:

1, 在程序使用未聲明的類時會自動調用 __autolaod() 函數來加載;

2, 在 __autoload() 函數中使用沒有聲明的類時也會調用 __autoload()

 

 

 

 

 

 

使用 SPL 方式註冊 autoload:

PHP5 增加了 SPL(Standard PHP Library), 包括是 php 一些內在的接口和類, 其中有一些

函數關於 autoload 的:

 

其中 spl_autoload_register() 用來註冊一個自動調用的函數, 可以註冊多個函數!

 

注意:

spl 的 autoload 和 聲明 __autoload() 函數是兩個不同的 autoload 機制; 

在使用 spl 註冊 autoload 時, __autoload() 函數會失效(如果定義了的話), 不管 spl 的 autoload 

是否加載到對應的類, __autoload() 都不會起作用. 因此如果程序中聲明 __autoload()

並且使用 spl 的 autoload, 最好用 spl 註冊下 __autoload 函數.

 

spl_autoload() 函數是 spl autoload 機制默認的自動加載函數, 在通過 spl_autoload_register()

激活的 __autoload 的棧爲空,則 spl_autoload() 會被自動調用, 如果不爲空, 則 spl_autoload() 不會

被自動調用.

spl_autoload() 接受一個參數, 是要被加載的類名, 他是 spl 中對應的 __autoload() 函數;

spl_autoload() 在 include_path 中尋找對應文件. 如果 spl 激活的 __autoload 的棧爲不會空,

則 spl_autolaod() 不會被自動調用.

 

spl_autoload_call();

調用多有 spl 註冊的函數來加載類, 這個函數是要手動調用的, 他不會自動調用.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章