深入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 相关文章推荐
Breeze 文章管理系统 v1.0.0正式发布
Dec 14 PHP
PHP 解决utf-8和gb2312编码转换问题
Mar 18 PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
Aug 14 PHP
探讨捕获php错误信息方法的详解
Jun 09 PHP
解析smarty模板中类似for的功能实现
Jun 18 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
Jun 22 PHP
php简单判断两个字符串是否相等的方法
Jul 13 PHP
基于JQuery+PHP编写砸金蛋中奖程序
Sep 08 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
May 17 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
Aug 01 PHP
PHP基于SPL实现的迭代器模式示例
Apr 22 PHP
使用laravel指定日志文件记录任意日志
Oct 17 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
PHP array_multisort()函数的使用札记
2011/07/03 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
jquery删除数组中重复元素
2016/12/05 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
[01:07:19]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第一场
2018/04/06 DOTA
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
Python实现周期性抓取网页内容的方法
2015/11/04 Python
OpenCV实现人脸识别
2017/04/07 Python
Python简单计算数组元素平均值的方法示例
2017/12/26 Python
Python中is和==的区别详解
2018/11/15 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
C和C++经典笔试题附答案解析
2014/08/18 面试题
3.12植树节活动总结2014
2014/03/13 职场文书
企业法人授权委托书
2014/04/03 职场文书
2014年教师党员公开承诺书
2014/05/28 职场文书
工资收入证明
2014/10/07 职场文书
党风廉政教育心得体会2016
2016/01/22 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers