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 相关文章推荐
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
May 04 PHP
处理单名多值表单的详解
Jun 08 PHP
简单实用的.net DataTable导出Execl
Oct 28 PHP
php获取表单中多个同名input元素的值
Mar 20 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
自己写的php中文截取函数mb_strlen和mb_substr
Feb 09 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
Yii调试查看执行SQL语句的方法
Jul 15 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 PHP
PHP中非常有用却鲜有人知的函数集锦
Aug 17 PHP
浅谈laravel-admin的sortable和orderby使用问题
Oct 03 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
PHP的面向对象编程
2006/10/09 PHP
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
PHP技术开发微信公众平台
2015/07/22 PHP
php微信开发之上传临时素材
2016/06/24 PHP
PHP执行系统命令函数实例讲解
2021/03/03 PHP
javascript中的delete使用详解
2013/04/11 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
极简主义法编写JavaScript类
2017/11/02 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
vue使用监听实现全选反选功能
2018/07/06 Javascript
深入浅析var,let,const的异同点
2018/08/07 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
在Python中使用正则表达式的方法
2015/08/13 Python
python3大文件解压和基本操作
2017/12/15 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
python获取url的返回信息方法
2018/12/17 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
C语言基础笔试题
2013/04/27 面试题
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
美术教师自我鉴定
2014/02/12 职场文书
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
车间安全生产标语
2014/06/06 职场文书