深入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 相关文章推荐
php array_slice函数的使用以及参数详解
Aug 30 PHP
php adodb连接mssql解决乱码问题
Jun 12 PHP
php 文章采集正则代码
Dec 28 PHP
Ping服务的php实现方法,让网站快速被收录
Feb 04 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
PHP合并静态文件详解
Nov 14 PHP
PHP中PDO的事务处理分析
Apr 07 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
php微信公众平台开发(一) 配置接口
Dec 06 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
PHP实现本地图片转base64格式并上传
May 29 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浮点数精确运算
2016/03/10 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
关于JS管理作用域的问题
2013/04/10 Javascript
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
jquery教程ajax请求json数据示例
2014/01/13 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
python回调函数的使用方法
2014/01/23 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
Python Socket传输文件示例
2017/01/16 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
Python如何省略括号方法详解
2020/03/21 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
浅谈html5与APP混合开发遇到的问题总结
2018/03/20 HTML / CSS
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
商务英语求职自荐信范文
2013/12/24 职场文书
会计专业自我鉴定
2014/02/10 职场文书
小学少先队活动方案
2014/02/18 职场文书
银行爱岗敬业演讲稿
2014/05/05 职场文书
委托书格式要求
2015/01/28 职场文书
简历自荐信范文
2015/03/09 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
2019新员工心得体会
2019/06/25 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书