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脚本的10个技巧(4)
Oct 09 PHP
使用网络地址转换实现多服务器负载均衡
Oct 09 PHP
谈谈PHP的输入输出流
Feb 14 PHP
php生成随机密码的三种方法小结
Sep 04 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
Sep 05 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
Jun 12 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
PHP.ini安全配置检测工具pcc简单介绍
Jul 02 PHP
php使用PDO获取结果集的方法
Feb 16 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
thinkPHP框架实现多表查询的方法
Jun 14 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
Yii框架组件和事件行为管理详解
2016/05/20 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
将 vue 生成的 js 上传到七牛的实例
2017/07/28 Javascript
nodeJS微信分享
2017/12/20 NodeJs
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
办公室主任岗位职责
2013/11/08 职场文书
高三生物教学反思
2014/01/25 职场文书
团日活动策划书
2014/02/01 职场文书
银行内勤岗位职责
2014/04/09 职场文书
捐书活动总结
2014/05/04 职场文书
社区戒毒工作方案
2014/06/04 职场文书
2014年终个人工作总结
2014/11/07 职场文书
工会积极分子个人总结
2015/03/03 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
暂住证证明
2015/06/19 职场文书
详解Python类和对象内容
2021/06/22 Python
JavaScript实例 ODO List分析
2022/01/22 Javascript
Elasticsearch 数据类型及管理
2022/04/19 Python