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使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
Jul 03 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
Jan 19 PHP
PHP遍历文件夹与文件类及处理类用法实例
Sep 23 PHP
php+mysql数据库实现无限分类的方法
Dec 12 PHP
php中get_meta_tags()、CURL与user-agent用法分析
Dec 16 PHP
php析构函数的简单使用说明
Aug 24 PHP
PHP正则表达式过滤html标签属性(DEMO)
May 04 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
PHP实现读取文件夹及批量重命名文件操作示例
Apr 15 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 PHP
laravel中Redis队列监听中断的分析
Sep 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
Adodb的十个实例(清晰版)
2006/12/31 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
2012/03/27 PHP
php gzip压缩输出的实现方法
2013/04/27 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
详解PHP归并排序的实现
2016/10/18 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
2010/11/23 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
Jquery基础教程之DOM操作
2015/08/19 Javascript
javascript实现禁止复制网页内容汇总
2015/12/30 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
2019/09/11 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
英国综合网上购物商城:The Hut
2018/07/03 全球购物
JNI的定义
2012/11/25 面试题
师范毕业生自荐信
2013/10/17 职场文书
房地产员工找工作的自我评价
2013/11/15 职场文书
教师实习自我鉴定
2013/12/14 职场文书
幼儿园小班教学反思
2014/02/02 职场文书
干部鉴定材料
2014/05/18 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
Hive日期格式转换方法总结
2022/06/25 数据库