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 相关文章推荐
关于时间计算的结总
Dec 06 PHP
PHP 编程请选择正确的文本编辑软件
Dec 21 PHP
也谈php网站在线人数统计
Apr 09 PHP
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
Jan 30 PHP
PHP 7.0.2 正式版发布
Jan 08 PHP
php时间函数用法分析
May 28 PHP
利用PHP将图片转换成base64编码的实现方法
Sep 13 PHP
php 判断IP为有效IP地址的方法
Jan 28 PHP
PHP使用mongoclient简单操作mongodb数据库示例
Feb 08 PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 PHP
PHP下载大文件失败并限制下载速度的实例代码
May 10 PHP
laravel框架如何设置公共头和公共尾
Oct 22 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
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
javascript数组排序汇总
2015/07/07 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
2016/09/09 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
bootstrap table实例详解
2017/01/06 Javascript
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
小程序实现横向滑动日历效果
2019/10/21 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
python实现简单的文字识别
2018/11/27 Python
python中退出多层循环的方法
2018/11/27 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
Python程序慢的重要原因
2020/09/04 Python
python 如何调用远程接口
2020/09/11 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
表扬信格式
2014/01/12 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
排球赛新闻稿
2015/07/17 职场文书
学校教师培训工作总结
2015/10/14 职场文书
禁毒心得体会范文
2016/01/15 职场文书
python实现局部图像放大
2021/11/17 Python
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python