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 相关文章推荐
提问的智慧(2)
Oct 09 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
Jul 05 PHP
PHP中获取时间的下一周下个月的方法
Mar 18 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
Jul 05 PHP
PHP单例模式详细介绍
Jul 01 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
ThinkPHP 模板substr的截取字符串函数详解
Jan 09 PHP
PHP使用strrev翻转中文乱码问题的解决方法
Jan 13 PHP
PHP编程求最大公约数与最小公倍数的方法示例
May 29 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
Laravel 实现关系模型取出需要的字段
Oct 10 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中模糊查询并关联三个select框
2017/06/19 PHP
php探针不显示内存解决方法
2019/09/17 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
js url传值中文乱码之解决之道
2009/11/20 Javascript
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
angular将html代码输出为内容的实例
2018/09/30 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
layui动态表头的实现代码
2019/08/22 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
JS手写一个自定义Promise操作示例
2020/03/16 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
JavaScript this关键字的深入详解
2021/01/14 Javascript
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
python和js交互调用的方法
2020/06/23 Python
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
会计电算化专业应届大学生求职信
2013/10/22 职场文书
创新型城市实施方案
2014/03/06 职场文书
企业元宵节主持词
2014/03/25 职场文书
酒店仓管员岗位职责
2015/04/01 职场文书
Html5新增了哪些功能
2021/04/16 HTML / CSS