深入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 相关文章推荐
phpExcel中文帮助手册之常用功能指南
Aug 18 PHP
php+MySQL判断update语句是否执行成功的方法
Aug 28 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
php利用反射实现插件机制的方法
Mar 14 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
Aug 27 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
Mar 23 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
php分页查询的简单实现代码
Mar 14 PHP
thinkphp关于简单的权限判定方法
Apr 03 PHP
在laravel中实现将查询的对象转换为多维数组的函数
Oct 21 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 PHP
PHP程序员必须知道的两种日志实例分析
May 14 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变量引用的面试题
2010/08/08 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
清空上传控件input file的值
2010/07/03 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
Bootstrap实现的表格合并单元格示例
2018/02/06 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
2016/07/08 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
python基于pyDes库实现des加密的方法
2017/04/29 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
深入浅析Python中的yield关键字
2018/01/24 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
Python合并同一个文件夹下所有PDF文件的方法
2019/03/11 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
 Alo Yoga官网:购买瑜伽服装
2018/06/17 全球购物
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
Lucene推荐的分页方式是什么?
2015/12/07 面试题
土木工程专业大学毕业生求职信
2013/10/13 职场文书
毕业寄语大全
2014/04/09 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
Python连续赋值需要注意的一些问题
2021/06/03 Python
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python