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 相关文章推荐
在PWS上安装PHP4.0正式版
Oct 09 PHP
php中http_build_query 的一个问题
Mar 25 PHP
有关PHP中MVC的开发经验分享
May 17 PHP
PHP flock 文件锁详细介绍
Dec 29 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
Apr 10 PHP
CI框架入门示例之数据库取数据完整实现方法
Nov 05 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
四个PHP非常实用的功能
Sep 29 PHP
PHP实现的构造sql语句类实例
Feb 03 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
Jan 21 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 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
PHP网页游戏学习之Xnova(ogame)源码解读(七)
2014/06/23 PHP
yii实现级联下拉菜单的方法
2014/07/31 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
常用一些Javascript判断函数
2012/08/14 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
Jquery异步上传文件代码实例
2019/11/13 jQuery
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
Python采用Django开发自己的博客系统
2020/09/29 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
Python中的TCP socket写法示例
2018/05/11 Python
创建Django项目图文实例详解
2019/06/06 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
斯福泰克软件测试面试题
2015/02/16 面试题
医院实习介绍信
2014/01/12 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
监察建议书格式
2014/05/19 职场文书
导游词之太原天龙山
2020/01/02 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/06 其他游戏