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 相关文章推荐
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
Oct 09 PHP
DedeCms模板安装/制作概述
Mar 11 PHP
PHP开发需要注意的安全问题
Sep 01 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
解析php取整的几种方式
Jun 25 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
Jul 05 PHP
什么情况下可以不写PHP的闭合标签“?>”
Aug 28 PHP
10个超级有用值得收藏的PHP代码片段
Jan 22 PHP
PHP 正则表达式小结
Feb 12 PHP
分享php邮件管理器源码
Jan 06 PHP
php中通过eval实现字符串格式的计算公式
Mar 18 PHP
php实现的pdo公共类定义与用法示例
Jul 19 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
WebQQ最新登陆协议的用法
2014/12/22 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
2016/06/22 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
YUI的Tab切换实现代码
2010/04/11 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
js添加table的行和列 具体实现方法
2013/07/22 Javascript
javascript创建和存储cookie示例
2014/01/07 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
2017/05/11 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
Python实现将xml导入至excel
2015/11/20 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
Python爬虫抓取论坛关键字过程解析
2020/10/19 Python
HTML5 实现图片上传预处理功能
2020/02/06 HTML / CSS
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物