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服务器实现多session并发运行
Oct 09 PHP
中篇:安装及配置PHP
Dec 13 PHP
php include的妙用,实现路径加密
Jul 29 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
详解php设置session(过期、失效、有效期)
Nov 12 PHP
thinkPHP删除前弹出确认框的简单实现方法
May 16 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
Yii2基于Ajax自动获取表单数据的方法
Aug 10 PHP
php 常用的系统函数
Feb 07 PHP
ThinkPHP中调用PHPExcel的实现代码
Apr 08 PHP
详解php框架Yaf路由重写
Jun 20 PHP
PHP实现阿里大鱼短信验证的实例代码
Jul 10 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
如何给phpadmin一个保护
2006/10/09 PHP
PHP编实现程动态图像的创建代码
2008/09/28 PHP
phpMyAdmin 安装及问题总结
2009/05/28 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
2013/07/05 PHP
php简单统计字符串单词数量的方法
2015/06/19 PHP
PHP使用Redis替代文件存储Session的方法
2017/02/15 PHP
Javascript remove 自定义数组删除方法
2009/10/20 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
js仿QQ邮箱收件人选择与搜索功能
2017/02/10 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
[05:09]2016国际邀请赛中国区预选赛淘汰赛首日精彩回顾
2016/06/29 DOTA
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
python实现列表中由数值查到索引的方法
2018/06/27 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
研发工程师岗位职责
2014/04/28 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
介绍信怎么写
2015/01/30 职场文书
综合实践活动报告
2015/02/05 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
浅谈node.js中间件有哪些类型
2021/04/29 Javascript
Promise面试题详解之控制并发
2021/05/14 面试题
SQL SERVER存储过程用法详解
2022/02/24 SQL Server