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(3)
Oct 09 PHP
PHP n个不重复的随机数生成代码
Jun 23 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
Sep 07 PHP
自己写了一个php检测文件编码的函数
Apr 21 PHP
PHP远程采集图片详细教程
Jul 01 PHP
PHP5.3与5.5废弃与过期函数整理汇总
Jul 10 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
Nov 11 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
Oct 07 PHP
php+lottery.js实现九宫格抽奖功能
Jul 21 PHP
Laravel 5.5 异常处理 & 错误日志的解决
Oct 17 PHP
Laravel Reponse响应客户端示例详解
Sep 03 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中与数组相关的函数
2007/03/22 PHP
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
微信公众平台天气预报功能开发
2014/07/06 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
菜鸟javascript基础资料整理2
2010/12/06 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
javascript中Array()数组函数详解
2015/08/23 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
Python3实现从指定路径查找文件的方法
2015/05/22 Python
Python之Web框架Django项目搭建全过程
2017/05/02 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
python中return的返回和执行实例
2019/12/24 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
英国著名国际平价时尚男装品牌:Topman
2016/08/27 全球购物
希尔顿酒店官方网站:Hilton Hotels
2017/06/01 全球购物
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
介绍一下OSI七层模型
2012/07/03 面试题
vue+django实现下载文件的示例
2021/03/24 Vue.js
简历中个人自我评价范文
2013/12/26 职场文书
办理护照介绍信
2014/01/16 职场文书
师德师风个人反思
2014/04/28 职场文书
禁止高声喧哗的标语
2014/06/11 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
小学生成绩单评语
2014/12/31 职场文书
2015年体育教师个人工作总结
2015/05/12 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL