PHP __autoload函数(自动载入类文件)的使用方法


Posted in PHP onFebruary 04, 2012

这也是OO设计的基本思想之一。在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可。下面是一个实际的例子:

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();

这个文件的运行是一点问题都没有的,可见autoload是多么的好用啊,呵呵……
但是不得不提醒你一下几个方面是必须要注意的。
1、如果类存在继承关系(例如:ClassB extends ClassA),并且ClassA不在ClassB所在目录
利用__autoload魔术函数实例化ClassB的时候就会受到一个致命错误:
Fatal error: Class ‘Classd' not found in ……ClassB.php on line 2,
解决方法:把所有存在extends关系的类放在同一个文件目录下,或者在实例化一个继承类的时候在文件中手工包含被继承的类;
2、另外一个需要注意的是,类名和类的文件名必须一致,才能更方便的使用魔术函数__autoload;
其他需要注意的事情:
3、在CLI模式下运行PHP脚本的话这个方法无效;
4、如果你的类名称和用户的输入有关——或者依赖于用户的输入,一定要注意检查输入的文件名,例如:.././这样的文件名是非常危险的。
PHP 相关文章推荐
一个用于MySQL的PHP XML类
Oct 09 PHP
PHP 冒泡排序算法的实现代码
Aug 08 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
Aug 21 PHP
php多任务程序实例解析
Jul 19 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
php中session与cookie的比较
Jan 27 PHP
PHP合并discuz用户脚本的方法
Aug 04 PHP
CI框架简单邮件发送类实例
May 18 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
Nov 10 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
PHP中Session ID的实现原理实例分析
Aug 17 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
Feb 04 #PHP
PHP中的cookie不用刷新就生效的方法
Feb 04 #PHP
PHP对象转换为数组函数(递归方法)
Feb 04 #PHP
PHP投票系统防刷票判断流程分析
Feb 04 #PHP
php摘要生成函数(无乱码)
Feb 04 #PHP
写出高质量的PHP程序
Feb 04 #PHP
组合算法的PHP解答方法
Feb 04 #PHP
You might like
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
PHP中将数组转成XML格式的实现代码
2011/08/08 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
javascript省市级联功能实现方法实例详解
2015/10/20 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
WebStorm ES6 语法支持设置&babel使用及自动编译(详解)
2017/09/08 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
用Python实现一个简单的线程池
2015/04/07 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
python redis 删除key脚本的实例
2019/02/19 Python
【python】matplotlib动态显示详解
2019/04/11 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
波兰品牌鞋履在线商店:Eastend.pl
2020/01/11 全球购物
上课迟到检讨书100字
2014/01/11 职场文书
个人存款证明书
2014/10/18 职场文书
1000字打架检讨书
2014/11/03 职场文书
新学期主题班会
2015/08/17 职场文书
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android