深入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获得当前的脚本网址
Dec 10 PHP
Phpbean路由转发的php代码
Jan 10 PHP
php数字游戏 计算24算法
Jun 10 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 PHP
PHP 解决session死锁的方法
Jun 20 PHP
Thinkphp实现MySQL读写分离操作示例
Jun 25 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
Jul 29 PHP
本地计算机无法启动Apache故障处理
Aug 08 PHP
php去除二维数组的重复项方法
Nov 03 PHP
PHP简单遍历对象示例
Sep 28 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 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实现图形显示Ip地址的代码及注释
2014/01/20 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
2014/11/04 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
用JAVASCRIPT如何给&amp;lt;textarea&amp;gt;&amp;lt;/textarea&amp;gt;赋值
2007/04/20 Javascript
datagrid框架的删除添加与修改
2013/04/08 Javascript
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
js性能优化技巧
2015/11/29 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
[01:14]英雄,所敬略同——2018完美盛典宣传视频4K
2018/12/05 DOTA
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
使用python3.5仿微软记事本notepad
2016/06/15 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
python机器学习包mlxtend的安装和配置详解
2019/08/21 Python
python 字典套字典或列表的示例
2019/12/16 Python
学python需要去培训机构吗
2020/07/01 Python
css3中transition属性详解
2014/09/02 HTML / CSS
戴尔美国官网:Dell
2016/08/31 全球购物
Otel.com:折扣酒店预订
2017/08/24 全球购物
小学教师师德感言
2014/02/10 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android