php _autoload自动加载类与机制分析


Posted in PHP onFebruary 10, 2012

在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可
test.class.php

<?php 
class abc{ 
function __construct() 
{ 
echo 'www.hzhuti.com; 
} 
} 
?>

load.php
代码如下
<?php 
class LOAD 
{ 
static function loadClass($class_name) 
{ 
$filename = $class_name.".class.php"; 
if (is_file($filename)) return include_once $filename; 
} 
} 
/** 
* 设置对象的自动载入 
* spl_autoload_register — Register given function as __autoload() implementation 
*/ 
spl_autoload_register(array('LOAD', 'loadClass')); 
$a = new Test();//实现自动加载,很多框架就用这种方法自动加载类 
?>

__autoload()
在实际项目中,不可能把所有的类都写在一个 PHP 文件中,当在一个 PHP 文件中需要调用另一个文件中声明的类时,就需要通过 include 把这个文件引入。不过有的时候,在文件众多的项目中,要一一将所需类的文件都 include 进来,一个很大的烦恼是不得不在每个类文件开头写一个长长的包含文件的列表。我们能不能在用到什么类的时候,再把这个类所在的 php 文件导入呢?
为此,PHP 提供了 __autoload() 方法,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
__autoload() 方法接收的一个参数,就是欲加载的类的类名,所以这时候需要类名与文件名对应,如 Person.php ,对应的类名就是 Pserson 。
下面看个完整的实例
class ClassA{ 
public function __construct(){ 
echo “ClassA load success!”; 
} 
} 
//定义一个类ClassA,文件名为ClassA.php 
class ClassA{ 
public function __construct(){ 
echo “ClassA load success!”; 
} 
} 
class ClassB extends ClassA { 
public function __construct(){ 
//parent::__construct(); 
echo “ClassB load success!”; 
} 
} 
//定义一个类ClassB,文件名为ClassB.php,ClassB继承ClassA 
class ClassB extends ClassA { 
public function __construct(){ 
//parent::__construct(); 
echo “ClassB load success!”; 
} 
}

定义两个测试用的类之后,我们来编写一个含有__autoload()方法的PHP运行程序文件如下:
function __autoload($classname){ 
$classpath=”./”.$classname.'.php'; 
if(file_exists($classpath)){ 
require_once($classpath); 
} 
else{ 
echo ‘class file'.$classpath.'not found!'; 
} 
} 
$newobj = new ClassA(); 
$newobj = new ClassB();
PHP 相关文章推荐
FCKeditor的安装(PHP)
Jan 13 PHP
php为什么选mysql作为数据库? Mysql 创建用户方法
Jul 02 PHP
php 求质素(素数) 的实现代码
Apr 12 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
php将图片保存为不同尺寸图片的图片类实例
Mar 30 PHP
php使用GD库创建图片缩略图的方法
Jun 10 PHP
PHP里的单例类写法实例
Jun 25 PHP
修改WordPress中文章编辑器的样式的方法详解
Dec 15 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
cakephp常见知识点汇总
Feb 24 PHP
浅谈php使用curl模拟多线程发送请求
Mar 08 PHP
PHP 对接美团大众点评团购券(门票)的开发步骤
Apr 03 PHP
php 文本文件的读取效率
Feb 10 #PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 #PHP
PHP中集成PayPal标准支付的实现方法分享
Feb 06 #PHP
PHP中call_user_func_array()函数的用法演示
Feb 05 #PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 #PHP
PHP高级对象构建 工厂模式的使用
Feb 05 #PHP
PHP备份数据库生成SQL文件并下载的函数代码
Feb 05 #PHP
You might like
作为PHP程序员应该了解MongoDB的五件事
2013/06/03 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
JS保留两位小数,多位小数的示例代码
2014/01/07 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
Vant 中的Toast设置全局的延迟时间操作
2020/11/04 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
Python遍历目录的4种方法实例介绍
2015/04/13 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
简单学习Python多进程Multiprocessing
2017/08/29 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
python实现控制台输出颜色
2021/03/02 Python
手对手的教你用canvas画一个简单的海报的方法示例
2018/12/10 HTML / CSS
应聘收银员个人的求职信
2013/11/30 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
甜品店创业计划书
2014/09/21 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
企业计划生育责任书
2015/05/09 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python