深入PHP autoload机制的详解


Posted in PHP onJune 09, 2013

在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进行复用,同时将来维护时也很便 利。这 也是OO设计的基本思想之一。在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可。
下面是一个实际的例 子:

/* Person.class.php */
<?php
class Person {
var $name, $age;
function __construct ($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
/* no_autoload.php */
<?php
require_once (”Person.class.php”);
$person = new Person(”Altair”, 6);
var_dump ($person);
?>

在这个例子中,no-autoload.php文件需要使用Person类,它使用了require_once将其包含,然后就可以直接使用Person类来实例化一个对象。

但 随着项目规模的不断扩大,使用这种方式会带来一些隐含的问题:如果一个PHP文件需要使用很多其它类,那么就需要很多的require/include语 句,这样有可能会造成遗漏或者包含进不必要的类文件。如果大量的文件都需要使用其它的类,那么要保证每个文件都包含正确的类文件肯定是一个噩梦。

PHP5为这个问题提供了一个解决方案,这就是类的自动装载(autoload)机制。autoload机制可以使得PHP程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件include进来,这种机制也称为lazy loading。

下面是使用autoload机制加载Person类的例子:

/* autoload.php */
<?php
function __autoload($classname) {
require_once ($classname . “class.php”);
}
$person = new Person(”Altair”, 6);
var_dump ($person);
?>

PHP 相关文章推荐
2.PHP入门
Oct 09 PHP
新手配置 PHP 调试环境(IIS+PHP+MYSQL)
Jan 10 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
Jun 06 PHP
php cli模式学习(PHP命令行模式)
Jun 03 PHP
ThinkPHP有变量的where条件分页实例
Nov 03 PHP
smarty自定义函数htmlcheckboxes用法实例
Jan 22 PHP
php生成数字字母的验证码图片
Jul 14 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
PHP架构及原理知识点详解
Dec 22 PHP
PDO实现学生管理系统
Mar 21 PHP
Laravel实现批量更新多条数据
Apr 06 PHP
定义php常量的详解
Jun 09 #PHP
基于php冒泡排序算法的深入理解
Jun 09 #PHP
深入apache host的配置详解
Jun 09 #PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 #PHP
基于PHP CURL用法的深入分析
Jun 09 #PHP
探讨PHP使用eAccelerator的API开发详解
Jun 09 #PHP
windows环境下php配置memcache的具体操作步骤
Jun 09 #PHP
You might like
用户的详细注册和判断
2006/10/09 PHP
PHP 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
PHP时间相关常用函数用法示例
2020/06/03 PHP
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
javascript面向对象包装类Class封装类库剖析
2013/01/24 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
Python给你的头像加上圣诞帽
2018/01/04 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
详解python中递归函数
2019/04/16 Python
python的命名规则知识点总结
2019/10/04 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
CSS3 实现的加载动画
2020/12/07 HTML / CSS
linux面试题参考答案(9)
2015/01/07 面试题
2014国培学习感言
2014/03/05 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
医学求职自荐信
2014/06/21 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript