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"));