深入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中$_SERVER的详细参数与说明
Jul 29 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 PHP
那些年一起学习的PHP(三)
Mar 22 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
May 07 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
Sep 13 PHP
Smarty foreach控制循环次数的实现详解
Jul 03 PHP
学习php设计模式 php实现策略模式(strategy)
Dec 07 PHP
利用PHP获取网站访客的所在地位置
Jan 18 PHP
Ubuntu 16.04下安装PHP 7过程详解
Mar 28 PHP
PHP开发之用微信远程遥控服务器
Jan 25 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
laravel框架数据库配置及操作数据库示例
Oct 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初学者头疼问题总结
2006/10/09 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
2012/05/07 PHP
php基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
php中static和const关键字用法分析
2016/12/07 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
javascript 回调函数详解
2014/11/11 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
Angular resolve基础用法详解
2018/10/03 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
Python的Tornado框架异步编程入门实例
2015/04/24 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
python线程join方法原理解析
2020/02/11 Python
5款实用的python 工具推荐
2020/10/13 Python
机电专业个人自荐信格式模板
2013/09/23 职场文书
后勤自我鉴定
2013/10/13 职场文书
物理研修随笔感言
2014/02/14 职场文书
爱我中华演讲稿
2014/05/20 职场文书
优秀团员事迹材料1000字
2014/08/20 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
村官个人总结范文
2015/03/03 职场文书
教师培训学习心得体会
2016/01/21 职场文书
Golang ort 中的sortInts 方法
2022/04/24 Golang