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 相关文章推荐
很实用的一个完整email发送程序
Oct 09 PHP
php url地址栏传中文乱码解决方法集合
Jun 25 PHP
php 广告调用类代码(支持Flash调用)
Aug 11 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
Aug 16 PHP
destoon之一键登录设置
Jun 21 PHP
php基于socket实现SMTP发送邮件的方法
Mar 05 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
PHP获取input输入框中的值去数据库比较显示出来
Nov 16 PHP
php实现URL加密解密的方法
Nov 17 PHP
微信公众号开发之获取位置信息php代码
Jun 13 PHP
PHP基础之输出缓冲区基本概念、原理分析
Jun 19 PHP
PHP时间类完整代码实例
Feb 26 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图片的裁剪与缩放生成符合需求的缩略图
2013/01/11 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
php+mysql实现无限级分类
2015/11/11 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
详解Javascript动态操作CSS
2014/12/08 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
基于JavaScript实现验证码功能
2017/04/01 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
Vue中保存用户登录状态实例代码
2017/06/07 Javascript
详解使用nvm安装node.js
2017/07/18 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
使用Python实现画一个中国地图
2019/11/23 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
标记环介质访问控制协议
2016/03/27 面试题
幼儿园中班教学反思
2014/02/10 职场文书
诚实守信演讲稿
2014/09/01 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
MBA推荐信怎么写
2015/03/25 职场文书