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创建PDF中文文档
Oct 09 PHP
用Socket发送电子邮件
Oct 09 PHP
第十节--抽象方法和抽象类
Nov 16 PHP
php 无限级 SelectTree 类
May 19 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
php警告Creating default object from empty value 问题的解决方法
Apr 02 PHP
php简单实现短网址(短链)还原的方法(测试可用)
May 09 PHP
PHP jQuery+Ajax结合写批量删除功能
May 19 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
php将字符串转换为数组实例讲解
May 05 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
Mar 09 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 Token(令牌)设计
2008/03/15 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript中的this实例分析
2011/04/28 Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
2015/11/17 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
Python 的内置字符串方法小结
2016/03/15 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
利用Python写一个爬妹子的爬虫
2018/06/08 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
Python3数字求和的实例
2019/02/19 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
详解Python中的分支和循环结构
2020/02/11 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
Melissa香港官网:MDreams
2016/07/01 全球购物
测试工程师职业规划书
2014/02/06 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
焦裕禄观后感
2015/06/03 职场文书
基于Redis的List实现特价商品列表功能
2021/08/30 Redis
Elasticsearch 配置详解
2022/04/19 Java/Android