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注入点构造代码
Jun 14 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
Jun 15 PHP
PHP MemCached高级缓存配置图文教程
Aug 05 PHP
php使用ob_flush不能每隔一秒输出原理分析
Jun 02 PHP
PHP实现获取中英文首字母
Jun 19 PHP
php将远程图片保存到本地服务器的实现代码
Aug 03 PHP
PHP中new static()与new self()的比较
Aug 19 PHP
php支付宝系列之电脑网站支付
May 30 PHP
PHP PDOStatement::fetchColumn讲解
Jan 31 PHP
Laravel 读取 config 下的数据方法
Oct 13 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
May 14 PHP
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
Apr 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五种设计模式小结
2011/03/23 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
JS 有名函数表达式全面解析
2010/03/19 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
python遍历类中所有成员的方法
2015/03/18 Python
python+matplotlib实现礼盒柱状图实例代码
2018/01/16 Python
python ---lambda匿名函数介绍
2019/03/13 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
Python reques接口测试框架实现代码
2020/07/28 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
Java里面有没有全局变量?为什么?
2015/02/06 面试题
公司中秋节活动方案
2014/02/12 职场文书
2015世界地球日活动总结
2015/02/09 职场文书
楚门的世界观后感
2015/06/03 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript