深入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程序的方法
Mar 09 PHP
PHP的SQL注入实现(测试代码安全不错)
Feb 27 PHP
基于PHP文件操作的详解
Jun 05 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
Jun 28 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
Aug 07 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
PHP集成百度Ueditor 1.4.3
Nov 23 PHP
php将html转成wml的WAP标记语言实例
Jul 08 PHP
thinkPHP框架实现的短信接口验证码功能示例
Jun 20 PHP
Laravel 自带的Auth验证登录方法
Sep 30 PHP
PHP 扩展Memcached命令用法实例总结
Jun 04 PHP
phpstorm激活码2020附使用详细教程
Sep 25 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
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
jQuery 事件队列调整方法
2009/09/18 Javascript
jQuery第三课 修改元素属性及内容的代码
2010/03/14 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
js 处理URL实用技巧
2010/11/23 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
Django中对数据查询结果进行排序的方法
2015/07/17 Python
Python 基础之字符串string详解及实例
2017/04/01 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
解读python如何实现决策树算法
2018/10/11 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
python ---lambda匿名函数介绍
2019/03/13 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
详解python的super()的作用和原理
2020/10/29 Python
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
大学生年度自我鉴定
2013/10/31 职场文书
银行开业庆典方案
2014/02/06 职场文书
委托证明书
2014/09/17 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
现货白银电话营销话术
2015/05/29 职场文书
sql server 累计求和实现代码
2022/02/28 SQL Server
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android