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 中使用随机数的三个步骤
Oct 09 PHP
获得Google PR值的PHP代码
Jan 28 PHP
dede全站URL静态化改造[070414更正]
Apr 17 PHP
MySQL 日期时间函数常用总结
Jun 12 PHP
php实现utf-8和GB2312编码相互转换函数代码
Feb 07 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
php实现singleton()单例模式实例
Nov 06 PHP
php结合ajax实现手机发红包的案例
Oct 13 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
Smarty模板变量与调节器实例详解
Jul 20 PHP
PHP常用header头定义代码示例汇总
Aug 29 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 27 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分页实例代码分享
2011/07/28 PHP
很让人受教的 提高php代码质量36计
2012/09/05 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
php学习笔记之面向对象
2014/11/08 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
微信小程序 Video API实例详解
2016/10/02 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
2019/02/19 Python
如何用Python来理一理红楼梦里的那些关系
2019/08/14 Python
python下载库的步骤方法
2019/10/12 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
python字典的值可以修改吗
2020/06/29 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
HTML5之语义标签介绍
2016/07/07 HTML / CSS
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
求职信需要的五点内容
2014/02/01 职场文书
餐饮业员工工作决心书
2014/03/11 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python