PHP實(shí)現(xiàn)自動(dòng)加載機(jī)制
php自動(dòng)加載
php自動(dòng)載方法有兩種.
第一種方案用__autoload,這個(gè)函數(shù)較簡單,也較弱.
但有一問題沒有解決, 就是在include前判斷文件是否存在的問題.
set_include_path('aa' . PATH_SEPARATOR . get_include_path()); function __autoload($className) { //如果加這個(gè)檢測, 因?yàn)榇宋募辉诋?dāng)前目錄下,它就會(huì)檢測不到文件存在, //但include是能成功的 if (file_exists($className . '.php')) { include_once($className . '.php'); } else { exit('no file'); } } $a = new Acls();
第二種方案用spl自動(dòng)加載,這里具體說一下這個(gè).
spl_autoload_register()
一個(gè)簡單的例子
set_include_path('aa' . PATH_SEPARATOR . get_include_path()); //function __autoload($className) //{ // if (file_exists($className . '.php')) { // include_once($className . '.php'); // } else { // exit('no file'); // } //} spl_autoload_register(); $a = new Acls();
spl_autoload_register()會(huì)自動(dòng)先調(diào)用spl_autoload()在路徑中查找具有小寫文件名的".php"程序.默認(rèn)查找的擴(kuò)展名還有".ini",還可以用spl_autoload_extenstions()注冊擴(kuò)展名.
在找不到的清況下,還可以通過自己定義函數(shù)查找
如
function loader1($class) { //自己寫一些加載的代碼 } function loader2($class) { //當(dāng)loader1()找不到時(shí),我來找 } spl_autoload_register('loader1'); spl_autoload_register('loader2');
還可以更多........
MVC框架是如何實(shí)現(xiàn)自動(dòng)加載的
首先設(shè)置路徑
$include = array('application/controllers', 'application/models', 'application/library');
set_include_path(get_include_path() . PATH_SEPARATOR .implode(PATH_SEPARATOR, $config['include']));
在獲取URL,解析出控制器與方法.
然后設(shè)置自動(dòng)加載
class Loader { /** * 自動(dòng)加載類 * @param $class 類名 */ public static function autoload($class) { $path = ''; $path = str_replace('_', '/', $class) . '.php'; include_once($path); } } /** * sql自動(dòng)加載 */ spl_autoload_register(array('Loader', 'autoload'));
路由,實(shí)例化控制器,調(diào)用方法,你寫的東西就開始執(zhí)行了
/** * 路由 */ public function route() { if (class_exists($this->getController())) { $rc = new ReflectionClass($this->getController()); if ($rc->hasMethod($this->getAction())) { $controller = $rc->newInstance(); $method = $rc->getMethod($this->getAction()); $method->invoke($controller); } else throw new Exception('no action'); } else throw new Exception('no controller'); }
初步的自動(dòng)加載就完成了
到此這篇關(guān)于PHP實(shí)現(xiàn)自動(dòng)加載機(jī)制的文章就介紹到這了,更多相關(guān)PHP自動(dòng)加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php圖片水印添加、壓縮、剪切的封裝類實(shí)現(xiàn)
這篇文章主要介紹了php圖片水印添加,壓縮,剪切的封裝類實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-09-09CodeIgniter配置之a(chǎn)utoload.php自動(dòng)加載用法分析
這篇文章主要介紹了CodeIgniter配置之a(chǎn)utoload.php自動(dòng)加載用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了CodeIgniter自動(dòng)加載機(jī)制的原理與使用方法,需要的朋友可以參考下2016-01-01ThinkPHP實(shí)現(xiàn)批量刪除數(shù)據(jù)的代碼實(shí)例
這篇文章主要介紹了ThinkPHP實(shí)現(xiàn)批量刪除數(shù)據(jù)的代碼實(shí)例,需要的朋友可以參考下2014-07-07yii2.0使用Plupload實(shí)現(xiàn)帶縮放功能的多圖上傳
這篇文章主要介紹了yii2.0使用Plupload實(shí)現(xiàn)帶縮放功能的多圖上傳的相關(guān)資料,需要的朋友可以參考下2015-12-12從零開始學(xué)YII2框架(一)通過Composer安裝Yii2框架
今天終于搞明白怎么安裝Yii2了。對于我這種小白來說真是費(fèi)盡周折。下面來介紹下如何安裝Composer和如何使用Composer安裝Yii2。2014-08-08