通常php5在使用乙個類時,如果發現這個類沒有載入,就會自動執行__autoload()函式,在這個函式中我們可以載入需要使用的類。
autoload至少要做三件事情:
第一件事是根據類名確定類檔名。
第二件事是確定類檔案所在的磁碟路徑。
第三件事是將類從磁碟檔案中載入到系統中。
示例:
<?php
function
__autoload
($class)
else
if((substr($class,-5) == "model")
else
if((substr($class,-10) == "controller")
}$c = !empty($_get['c']) ? $_get['c'] : "user"; //將「user」當做預設要使用的控制器
$controller_name = $c.'controller'; //構建控制器的類名
$ctrl = new
$controller_name(); //可變類
$a = !empty($_get['a']) ? $_get['a'] : "index";
$action = $a . "action";
$ctrl -> $action();
以上例子中,接收了get引數『c』以後構建了類名「 $c.'controller'」,這個類沒有被載入,系統返回使用自動載入函式__autoload,查詢後符合「(substr($class,-10) == "controller"」條件,進行載入「require ctrl_path.$class.'class.php'」。
1.確定檔名:$class.'class.php'
2.確定磁碟路徑:ctrl_path.$class.'class.php'。(ctrl_path為設定好的路徑常量)
3.記載此檔案:require ctrl_path.$class.'class.php'。
注意:
1、如果類存在繼承關係(例如:classb extends classa),並且classa不在classb所在目錄
利用__autoload魔術函式例項化classb的時候就會受到乙個致命錯誤。
解決方法:把所有存在extends關係的類放在同乙個檔案目錄下,或者在例項化乙個繼承類的時候在檔案中手工包含被繼承的類;
2、另外乙個需要注意的是,類名和類的檔名必須一致,才能更方便的使用魔術函式__autoload;
3、在cli模式下執行php指令碼的話這個方法無效;
4、如果你的類名稱和使用者的輸入有關——或者依賴於使用者的輸入,一定要注意檢查輸入的檔名,例如:.././這樣的檔名是非常危險的。
php 魔法函式 autoload
php在魔術函式 autoload 方法出現以前,如果你要在乙個程式檔案中例項化100個物件,那麼你必須用include或者require包含進來100個類檔案,或者你把這100個類定義在同乙個類檔案中 相信這個檔案一定會非常大。但是 autoload 方法出來了,以後就不必為此大傷腦筋了,這個類會...
SPL函式的使用 Autoload
1.spl autoload extensions class.php,php set include path get include path path separator.libs spl autoload register new test 2.autoload會自動呼叫 function ...
php自動載入類 autoload 函式
php自動載入類 autoload 函式,很多開發者寫物件導向的應用程式時,對每個類的定義建立乙個 php 原始檔。乙個很大的煩惱是不得不在每個指令碼 每個類乙個檔案 開頭寫乙個長長的包含檔案的列表。很多開發者寫物件導向的應用程式時,對每個類的定義建立乙個 php 原始檔。乙個很大的煩惱是不得不在每...