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+MySQL的聊天室设计
Oct 09 PHP
php中实现记住密码自动登录的代码
Mar 02 PHP
PHP array_multisort() 函数的深入解析
Jun 20 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
Jun 24 PHP
在php和MySql中计算时间差的方法详解
Mar 27 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
Mar 17 PHP
示例详解Laravel重置密码代码重构
Aug 10 PHP
php 截取utf-8格式的字符串实例代码
Oct 30 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 PHP
php和asp语法上的区别总结
May 12 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
May 13 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实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
javascript读取xml实现javascript分页
2013/12/13 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
常用的 JS 排序算法 整理版
2018/04/05 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
[45:06]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第二场 11.28
2020/12/02 DOTA
基于python编写的微博应用
2014/10/17 Python
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
python 识别图片中的文字信息方法
2018/05/10 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
Python和Go语言的区别总结
2019/02/20 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
简述数据库的设计过程
2015/06/22 面试题
Python中pass语句的作用是什么
2016/06/01 面试题
应聘面试自我评价
2014/01/24 职场文书
信访工作个人总结
2015/03/03 职场文书
python 三边测量定位的实现代码
2021/04/22 Python
Python3 类型标注支持操作
2021/06/02 Python