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 相关文章推荐
echo, print, printf 和 sprintf 区别
Dec 06 PHP
随时给自己贴的图片加文字的php代码
Mar 08 PHP
实用函数7
Nov 08 PHP
MySQL修改密码方法总结
Mar 25 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
Jun 06 PHP
PHP循环结构实例讲解
Feb 10 PHP
ThinkPHP模板判断输出Defined标签用法详解
Jun 30 PHP
jquery+php实现导出datatables插件数据到excel的方法
Jul 06 PHP
yii实现model添加默认值的方法(2种方法)
Jan 06 PHP
WHOOPS PHP调试库的使用
Sep 29 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 PHP
php微信公众号开发之快递查询
Oct 20 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验证码函数
2016/05/19 PHP
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
前端性能优化及技巧
2016/05/06 Javascript
jQuery验证插件validate使用详解
2016/05/11 Javascript
如何让node运行es6模块文件及其原理详解
2018/12/11 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
javascript实现日历效果
2019/06/17 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python提取内容关键词的方法
2015/03/16 Python
Python中的ctime()方法使用教程
2015/05/22 Python
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
Python 中的with关键字使用详解
2016/09/11 Python
Python三级菜单的实例
2017/09/13 Python
git进行版本控制心得详谈
2017/12/10 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
python程序 创建多线程过程详解
2019/09/23 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
瑞士国际航空官网:SWISS
2016/07/21 全球购物
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
银行求职推荐信范文
2013/11/30 职场文书
网络信息安全承诺书
2014/03/26 职场文书
学术会议邀请函
2015/01/30 职场文书
Python3.10的一些新特性原理分析
2021/09/15 Python