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
zend framework多模块多布局配置
Feb 26 PHP
php&mysql 日期操作小记
Feb 27 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
Jun 19 PHP
php解压文件代码实现php在线解压
Feb 13 PHP
ThinkPHP的Widget扩展实例
Jun 19 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
[原创]php简单隔行变色功能实现代码
Jul 09 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
Mar 18 PHP
php中文语义分析实现方法示例
Sep 28 PHP
php实现大文件断点续传下载实例代码
Oct 01 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实现的轻量级简单爬虫
2015/07/08 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
javascript 动态添加表格行
2006/06/22 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
使用async await 封装 axios的方法
2018/07/09 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
简谈创建React Component的几种方式
2019/06/15 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
python常用知识梳理(必看篇)
2017/03/23 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
pytorch GAN伪造手写体mnist数据集方式
2020/01/10 Python
python TCP包注入方式
2020/05/05 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
HTML5进度条特效
2014/12/18 HTML / CSS
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
高中打架检讨书
2014/02/13 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android