深入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模板技术[转]
Jan 04 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
Aug 18 PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 PHP
smarty简单应用实例
Nov 03 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
Mar 28 PHP
CI(CodeIgniter)框架实现图片上传的方法
Mar 24 PHP
php str_replace替换指定次数的方法详解
May 05 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
PHP进阶学习之反射基本概念与用法分析
Jun 18 PHP
PHP实现与java 通信的插件使用教程
Aug 11 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 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
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
PHP实现简单实用的分页类代码
2016/04/08 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
详解JavaScript编程中的数组结构
2015/10/24 Javascript
json格式数据的添加,删除及排序方法
2016/01/21 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
python正则分组的应用
2013/11/10 Python
python实现三维拟合的方法
2018/12/29 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
tensorflow 变长序列存储实例
2020/01/20 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
应届生会计求职信
2013/11/11 职场文书
预备党员的自我评价
2014/03/12 职场文书
先进党支部申报材料
2014/12/24 职场文书
文书工作总结(范文)
2019/07/11 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书
Mysql开启外网访问
2022/05/15 MySQL