宝哥软件园

PHP MVC框架中类的自动加载机制实例分析

编辑:宝哥软件园 来源:互联网 时间:2021-08-20

本文实例讲述了PHP MVC框架中类的自动加载机制。分享给大家供大家参考,具体如下:

原文

实现类的自动加载主要使用到了set_include_path和spl _自动加载_寄存器函数。

set_include_path用于提前设置好可能会加载的类的路径。

spl _自动加载_寄存器用于调用相关自动加载所需类的函数,实现自动载入的功能。

有一点要注意的是:自动加载在实例化类的时候执行,也就是说使用延伸继承类的时候,是不会自动加载父类的。

设置目录如下:

实现自动加载功能相关的文件有:Loader.php,config.php,boot.php,index.php

config.php

?php/** *由PhpStorm创建*用户: KOA stal *日期: 2016/5/15 *时间: 10:48 */define(' APP _ PATH ',__DIR__).'/.');定义(“控制器路径”,__DIR__).'/./controller’);定义(' Model_PATH ',__DIR__).'/./model’);定义(' View_PATH ',__DIR__).'/./view’);Loader.php

?php/** *由PhpStorm创建*用户: KOA stal *日期: 2016/5/15 *时间: 12:03 */类Loader { public static function baseLoad(){ require _ once(' controller。PHP’);require _ once('模型。PHP’);}公共静态函数自动加载($class) { $path=$class .上课。PHP ';require _ once($ path);} } $ include=array(Controller _ PATH,Model_PATH,View _ PATH);set _ include _ path(get _ include _ path().路径分隔符.内爆(PATH_SEPARATOR,$ include));spl_autoload_register(数组(“加载程序”、“自动加载”);load : baseLoad();boot.php

?php/** *由PhpStorm创建*用户: KOA stal *日期: 2016/5/15 *时间: 12:19 */require _ once(' Loader。PHP’);index.php

?phprequire_once(__DIR__)./libs/config。PHP’);需要_一次(__DIR__)./libs/boot。PHP’);$ obj=新的Testcontroller();$ obj-show();经测试,以上代码可用,全文完。

加更

经测试上面的代码,在访问不存在的控制器是会报错,找不到相关类文件。因为我们缺少判断相关类文件是否存在。因此,我们对Loader.php进行优化,首先扫描相关类文件是否存在,如果不存在则报错。

?php/** *由PhpStorm创建*用户: KOA stal *日期: 2016/5/15 *时间: 12:03 */require _ once ' config。PHP ';类加载器{公共静态函数baseLoad(){ require _ once('控制器。PHP’);require _ once('模型。PHP’);}公共静态函数searchFile($filename,$ path){ $ file path=false;$ list=scandir($ path);foreach($列表为$ file){ $ realPath=$ path .目录分隔符.$ fileif(is_dir($realPath) $file!='.'$file!='.'){ $ RES=loader :3360 earchfile($ filename,$ real path);if($ RES){ return $ RES;} }elseif($file!='.'$file!='.'){ if($ file==$ filename){ $ file path=$ real path;打破;} } }返回$ filePath}公共静态函数自动加载($ class){ $ filename=$ class .上课。PHP ';$ cflag=loader :3360 earchfile($ filename,Controller _ PATH);$ mfalg=loader :3360 earch file($ filename,Model _ PATH);$ path=false$path=($cflag!=false)?$ cflag: $ path$path=($mfalg!=false)?$ mfalg: $路径;if($ path==false){ 0退出('类加载失败');} else { require _ once($ path);} } } load :3360 baseLoad();spl_autoload_register(数组(“加载程序”、“自动加载”);更多关于服务器端编程语言(专业超文本预处理器的缩写)框架相关内容感兴趣的读者可查看本站专题: 《php优秀开发框架总结》 、 《codeigniter入门教程》 、 《ThinkPHP入门教程》 、 《Zend FrameWork框架入门教程》 、 《php面向对象程序设计入门教程》 、 《php+mysql数据库操作入门教程》 及《php常见数据库操作技巧汇总》

希望本文所述对大家服务器端编程语言(专业超文本预处理器的缩写)程序设计有所帮助。

更多资讯
游戏推荐
更多+