在 PHP 5 中,再也不須要這樣了。能夠定義一個 __autoload() 函數,它會在試圖使用還沒有被定義的類時自動調用。經過調用此函數,腳本引擎在 PHP 出錯失敗前有了最後一個機會加載所需的類。php
Tip函數
spl_autoload_register() 提供了一種更加靈活的方式來實現類的自動加載。所以,再也不建議使用 __autoload() 函數,在之後的版本中它可能被棄用。.net
Note:code
在 5.3.0 版以前,__autoload 函數拋出的異常不能被 catch 語句塊捕獲並會致使一個致命錯誤。從 5.3.0+ 以後,__autoload 函數拋出的異常能夠被 catch 語句塊捕獲,但須要遵循一個條件。若是拋出的是一個自定義異常,那麼必須存在相應的自定義異常類。__autoload 函數能夠遞歸的自動加載自定義異常類。遞歸
Note:ip
自動加載不可用於 PHP 的 CLI 交互模式。ci
Note:get
若是類名好比被用於 call_user_func(),則它可能包含一些危險的字符,好比 ../。 建議您在這樣的函數中不要使用用戶的輸入,起碼須要在 __autoload() 時驗證下輸入。io
<?php /* * defined function responsible for loading class, * replacing the old __ autoload. * ROOT is constant of the path root of the system */ spl_autoload_extensions('.class.php'); spl_autoload_register('loadClasses'); function loadClasses($className) { if( file_exists(ROOT_DIR.DS.'controller/'.$className.'.class.php' ) ){ set_include_path(ROOT_DIR.DS.'controller'.DS); spl_autoload($className); } elseif( file_exists('model/'.$className.'.class.php' ) ){ set_include_path(ROOT_DIR.DS.'model'.DS); spl_autoload($className); }elseif( file_exists('view/'.$className.'.class.php' ) ){ set_include_path(ROOT_DIR.DS.'view'.DS); spl_autoload($className ); }else { set_include_path(ROOT_DIR.DS.'lib'.DS); spl_autoload($className ); } } ?>