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预定义常量
Dec 25 PHP
Smarty安装配置方法
Apr 10 PHP
PHP file_exists问题杂谈
May 07 PHP
解析php中curl_multi的应用
Jul 17 PHP
php调用Google translate_tts api实现代码
Aug 07 PHP
PHP计算加权平均数的方法
Jul 16 PHP
php实现简单的MVC框架实例
Sep 23 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
Dec 02 PHP
php中curl和soap方式请求服务超时问题的解决
Jun 11 PHP
laravel 实现设置时区的简单方法
Oct 10 PHP
php实现的简单多进程服务器类完整示例
Feb 01 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源代码
2006/10/09 PHP
php smarty模版引擎中的缓存应用
2009/12/02 PHP
eAccelerator的安装与使用详解
2013/06/13 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
python中enumerate函数用法实例分析
2015/05/20 Python
python实现发送邮件功能
2017/07/22 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
用python制作个音乐下载器
2021/01/30 Python
Ratchet 模态框的实现
2020/08/19 HTML / CSS
SCDKey德国:全球领先的数字游戏市场
2019/04/09 全球购物
厨房管理计划书
2014/04/27 职场文书
表扬通报怎么写
2015/01/16 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书