PHP自动加载的实现有几种方式,怎样做?
Admin 2022-11-28 群英技术资�
php自动载方法有两种.
第一种用__autoload,这个函数较简�,也较�.
但有一问题没有解决, 就是在include前判断文件是否存在的问题.
set_include_path('aa' . PATH_SEPARATOR . get_include_path()); function __autoload($className) { //如果加这个检�, 因为此文件不在当前目录下,它就会检测不到文件存�, //但include是能成功� if (file_exists($className . '.php')) { include_once($className . '.php'); } else { exit('no file'); } } $a = new Acls();
第二种用spl自动加载,这里具体说一下这�.
spl_autoload_register()
一个简单的例子
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()会自动先调用spl_autoload()在路径中查找具有小写文件名的".php"程序.默认查找的扩展名还有".ini",还可以用spl_autoload_extenstions()注册扩展�.
在找不到的清况下,还可以通过自己定义函数查找
�
function loader1($class) { //自己写一些加载的代码 } function loader2($class) { //当loader1()找不到时,我来� } spl_autoload_register('loader1'); spl_autoload_register('loader2');
还可以更�........
MVC框架是如何实现自动加载的
首先设置路径
$include = array('application/controllers', 'application/models', 'application/library');
set_include_path(get_include_path() . PATH_SEPARATOR .implode(PATH_SEPARATOR, $config['include']));
在获取URL,解析出控制器与方�.
然后设置自动加载
class Loader { /** * 自动加载� * @param $class 类名 */ public static function autoload($class) { $path = ''; $path = str_replace('_', '/', $class) . '.php'; include_once($path); } } /** * sql自动加载 */ spl_autoload_register(array('Loader', 'autoload'));
路由,实例化控制器,调用方法,你写的东西就开始执行了
/** * 路由 */ 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'); }
初步的自动加载就完成�
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容�
猜你喜欢
在laravel中,路由命名的作用是生成路由,便于重定向;路由命名可以让特定路由方便地生成URL或重定向。开发者可以用name方法链接到路由来定义指定路由的名称�
项目开发中,如果有定时任务的业务要求,我们会使用linux的crontab来解决,但是它的最小粒度是分钟级别,如果要求粒度是秒级别的,甚至毫秒级别的,crontab就无法满足,值得庆幸的是swoole提供的强大的毫秒定时器�
继承已为大家所熟知的一个程序设计特性,PHP的对象模型也使用了继承。继承将会影响到类与类,对象与对象之间的关系。比如,当扩展一个类,子类就会继承父类所有公有的�...
如何用php获取当前日期�7天内的时间,比如今天�5号,我想获取5号前7天的日期,怎么获取?实现方法如下:如何用php获取当前日期�7天内的时间实现方法如下:$t=time()+3600*8;//这里和标准时间相�8小时需要补�$tget=$t-3600*24*5;//比如5天前的时间echodate("Y-m-dH:i:s星期w",$tget);//格式按你需要选取例:$che
我所采用的服务器是Apache,实际上对所有服务器的操作是相同的。服务器安装在本地电脑上,我们项目的源文件位于服务器的跟文件目录下,也即 /htdocs 目录下�
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所�
增值电信经营许可证 : B1.B2-20140078