標籤:str 執行個體 class 載入 自動載入 介紹 height ace 參考
這是一篇對spl_autoload_register()函數的個人簡單介紹,有需要的同學可以參考,主要是討論spl_autoload_register()函數所註冊的函數的參數的個人一點迷惑。
廢話不多說,上代碼,還請同學注意看注釋。
<?php //定義一個函數,功能自動載入類檔案 function autoload($class){ //參數$class,不用管它,它自己會以``類的名稱``作為參數 //類檔案的地址,類檔案的格式是$class.class.php $classPath = str_replace(‘\\‘,‘/‘,__DIR__).‘/‘.$class.‘.class.php‘; //var_dump($classPath); if(file_exists($classPath)){ include_once $classPath; } } //註冊自動載入函數,此時autoload這個函數就相當於php的自動尋找類函數__autoload() spl_autoload_register(‘autoload‘); $obj = new auto;//這個類已經存在同級目錄中,我的情況 $obj->autoloader(); /*spl_autoload_register假如用在類中,則傳遞的參數必須包含類名和方法名 *如下面的例子: */ class loadClass{ public function loadFunction($class){ $classPath = str_replace(‘\\‘,‘/‘,__DIR__).‘/‘.$class.‘.class.php‘; if(file_exists($classPath)){ include_once $classPath; } } public function _register(){ //註冊自動載入方法loadFunction spl_autoload_register(‘self::loadFunction‘); //或者參數為數組,數組的第一個元素為類名,第二個為要註冊的方法名 spl_autoload_register(array(‘loadClass‘,‘loadFunction‘)); } }對於參數的個人經驗:
關於這個函數的參數,它困擾了我一個小時,你想想,spl_autoload_register()註冊的函數,它是個自動載入函數,我們是沒必要直接調用它的,它會自動載入到棧區中,不能直接調用,也就是說,我們無需調用上面的autoload(),也就根本沒辦法給它傳參數了,那麼這個參數會從哪裡來呢?這個在我剛剛認識spl_autoload_register()時,確實讓我苦惱了一會,不過,我做了一下實驗,發現這個參數確實無須傳遞,它自己會以你調用的類名傳遞過去,你執行個體化什麼類,他就傳遞什麼類名,就是這麼智能。說到這裡,感歎spl_autoload_register註冊的函數厲害不?呵呵,不信,你可以做一下實驗
php的spl_autoload_register函數的一點個人見解