深入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的图形函数中显示汉字
Oct 09 PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
php获取新浪微博数据API实例
Nov 12 PHP
PHP 之 写时复制介绍(Copy On Write)
May 13 PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
再谈PHP中单双引号的区别详解
Jun 12 PHP
PHPMailer发送邮件
Dec 28 PHP
[原创]php正则删除img标签的方法示例
May 27 PHP
php实现的错误处理封装类实例
Jun 20 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
PHP5中新增stdClass 内部保留类
2011/06/13 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
php简单生成随机数的方法
2015/07/30 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
基于JavaScript实现自定义滚动条
2017/01/25 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
2017/02/08 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
利用python批量检查网站的可用性
2016/09/09 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
python实现画一颗树和一片森林
2018/06/25 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
python Paramiko使用示例
2020/09/21 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
研修心得体会
2014/09/04 职场文书
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技