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配置文件中最常用四个ini函数
Mar 19 PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 PHP
网页上facebook分享功能具体实现
Jan 26 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
一个php生成16位随机数的代码(两种方法)
Sep 16 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
Feb 07 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
Smarty模板变量调节器用法分析
May 23 PHP
PHP模糊查询的实现方法(推荐)
Sep 06 PHP
PHP 常用时间函数资料整理
Oct 22 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 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
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
深入理解PHP内核(一)
2015/11/10 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
使用angular写一个hello world
2015/01/23 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
javascript中判断json的方法总结
2015/08/27 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
jquery事件绑定解绑机制源码解析
2016/09/19 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
Python程序设计入门(1)基本语法简介
2014/06/13 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
简单实现python数独游戏
2018/03/30 Python
opencv python 基于KNN的手写体识别的实例
2018/08/03 Python
解决Django中调用keras的模型出现的问题
2019/08/07 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
python爬虫中多线程的使用详解
2019/09/23 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
会走路的树教学反思
2014/02/20 职场文书
促销活动总结
2014/04/28 职场文书
导游词之吉林花园山
2019/10/17 职场文书
PHP策略模式写法
2021/04/01 PHP
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers