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基础知识:类与对象(4) 范围解析操作符(::)
Dec 13 PHP
Windows下XDebug 手工配置与使用说明
Jul 11 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
phpmyadmin config.inc.php配置示例
Aug 27 PHP
php实现建立多层级目录的方法
Jul 19 PHP
PHP curl伪造IP地址和header信息代码实例
Apr 27 PHP
php自定义函数实现二维数组按指定key排序的方法
Sep 29 PHP
php使用crypt()函数进行加密
Jun 08 PHP
PHP环形链表实现方法示例
Sep 15 PHP
windows环境下使用Composer安装ThinkPHP5
May 18 PHP
Yii框架操作cookie与session的方法实例详解
Sep 04 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 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 self,$this,const,static,->的使用
2009/10/22 PHP
php 定界符格式引起的错误
2011/05/24 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
javascript之dhDataGrid Ver2.0.0代码
2007/07/01 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
jQuery操作input type=radio的实现代码
2012/06/14 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
[02:48]DOTA2超级联赛专访海涛:你们的选择没有错
2013/06/07 DOTA
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
python提取xml里面的链接源码详解
2019/10/15 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
Python-openCV开运算实例
2020/07/05 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
英国精品买手店:Browns Fashion
2016/09/29 全球购物
Hammitt官网:设计师手袋
2020/05/23 全球购物
Python的两道面试题
2013/06/29 面试题
管理心得体会
2013/12/28 职场文书
便利店的创业计划书
2014/01/15 职场文书
两只小狮子教学反思
2014/02/05 职场文书
商业房地产广告语
2014/03/13 职场文书
文体活动实施方案
2014/03/27 职场文书
房屋维修协议书范本
2014/09/25 职场文书
个人四风对照检查材料
2014/09/26 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书