php自动加载的两种实现方法


Posted in PHP onJune 21, 2010

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/catalog/controllers', 'application/catalog/models', ),$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'); 
}

初步的自动加载就完成了
PHP 相关文章推荐
php 处理上百万条的数据库如何提高处理查询速度
Feb 08 PHP
php 5.3.5安装memcache注意事项小结
Apr 12 PHP
几种有用的变型 PHP中循环语句的用法介绍
Jan 30 PHP
php中计算程序运行时间的类代码
Nov 03 PHP
使用array mutisort 实现按某字段对数据排序
Jun 18 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
php的zip解压缩类pclzip使用示例
Mar 14 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
PHP curl批处理及多请求并发实现方法分析
Aug 15 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 #PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 #PHP
PHP操作xml代码
Jun 17 #PHP
PHP XML error parsing SOAP payload on line 1
Jun 17 #PHP
PHP zlib扩展实现页面GZIP压缩输出
Jun 17 #PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
Jun 15 #PHP
PHP迅雷、快车、旋风下载专用链转换代码
Jun 15 #PHP
You might like
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
JS模拟自动点击的简单实例
2013/08/08 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
ES6入门教程之Class和Module详解
2017/05/17 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
js中null与空字符串""的区别讲解
2019/01/17 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
python字典一键多值实例代码分享
2019/06/14 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
Python连接Impala实现步骤解析
2020/08/04 Python
extern在函数声明中是什么意思
2014/01/19 面试题
师范生自荐信
2013/10/27 职场文书
初二物理教学反思
2014/01/29 职场文书
个人委托书
2014/07/31 职场文书
2014年银行柜员工作总结
2014/11/12 职场文书
2016年教师寒假学习心得体会
2015/10/09 职场文书
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android