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程序
Oct 09 PHP
BBS(php & mysql)完整版(八)
Oct 09 PHP
简单的php中文转拼音的实现代码
Feb 11 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
php获取文件名后缀常用方法小结
Feb 24 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 PHP
实现PHP搜索加分页
Oct 12 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 PHP
laravel 根据不同组织加载不同视图的实现
Oct 14 PHP
laravel框架语言包拓展实现方法分析
Nov 22 PHP
详解阿里云视频直播PHP-SDK接入教程
Jul 09 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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
用php写的serv-u的web申请账号的程序
2006/10/09 PHP
也谈 PHP 和 MYSQL
2006/10/09 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
Symfony页面的基本创建实例详解
2015/01/26 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
js实现可拖动DIV的方法
2013/12/17 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
node使用UEditor富文本编辑器的方法实例
2017/07/11 Javascript
js匿名函数使用&传参(实例)
2017/09/08 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
详解vue 组件注册
2020/11/20 Vue.js
javascript实现移动端轮播图
2020/12/09 Javascript
python解析模块(ConfigParser)使用方法
2013/12/10 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
python删除过期log文件操作实例解析
2018/01/31 Python
Python反转序列的方法实例分析
2018/03/21 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
Python字典的核心底层原理讲解
2019/01/24 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
用python求一重积分和二重积分的例子
2019/12/06 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
27个经典Linux面试题及答案,你知道几个?
2013/01/10 面试题
十八届三中全会个人学习材料
2014/02/13 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
电话客服工作职责
2014/07/27 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
实习报告怎么写
2019/06/20 职场文书
演讲开头怎么书写?
2019/08/06 职场文书
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript