PHP在執行的時候,如果發現需要使用一個類別(只要是和這個類別相關的任何的操作),而此時,當前腳本並沒有這個類別的定義代碼!那麼PHP此時會自動的呼叫一個名字為__autoload()的一個函數!並且,在呼叫的時候,會給該函數一個參數,這個參數就是目前需要的類別的類別名稱。
#自动加载 函数function __aotuload($class_name){ if(!file_exists("./".$class_name.".class.php")){ include "./".$class_name.".class.php"; }else{ die("系统错误,没有找到相关的类!"); } }
一般的,系統的自動載入函數就是__autoload(),但是,隨著專案的擴展,有可能出現多個自動載入函數,例如,被載入的檔案裡面又出現了自動載入函數,這個時候就出現了函數的重名的問題!
我們一把都不使用__autoload函數,而是註冊使用者自己的自動載入函數以避免上述情況的發生!
#注册其他的自动加载函数 解决自动加载函数重名问题function f1($class_name){ if(!file_exists("./".$class_name.".class.php")){ include "./".$class_name.".class.php"; }else{ die("系统错误,没有找到相关的类!"); } } spl_autoload_register('f1');
要注意以下的幾點:
1, 註冊一定要發生在需要某個類別之前!
2, 可以註冊多個自動載入函數,在需要的類別檔案載入成功之前,會依序的依照註冊的順序執行,直到找到為止!
3, 一旦註冊了其他的自動載入函數,那麼系統預設的那個__autoload函數就失效了!
此時,如果想要繼續使用__autoload函數,必須像註冊其他的普通函數一樣重新註冊!
在物件導向的程式設計風格中,我們一般會將使用者自訂的自動載入函數封裝到一個類別中!
語法形式為:
spl_autoload_register(array('類別名稱','方法名稱'));
另外,註冊靜態方法還有一個比較簡單的形式:
spl_autoload_register('類別名稱::方法名稱');
此時,註冊的步驟如下:
1, 首先要實例化一個物件
2, 再使用spl_autoload_register()註冊,此時函數的參數形式如下:
spl_autoload_register( array(物件變量,'方法名稱'));
#注册自动加载方法class Common { public static function autoload($class_name){ if(!file_exists("./".$class_name.".class.php")){ include "./".$class_name.".class.php"; }else{ die("系统错误,没有找到相关的类!"); } } } //spl_autoload_register("Common::autoload"); spl_autoload_register(array("Common","autoload"));
相關推薦:
以上是PHP實作自動載入相關函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!