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 相关文章推荐
MySQL连接数超过限制的解决方法
Jul 17 PHP
解析CodeIgniter自定义配置文件
Jun 18 PHP
PHP生成Gif图片验证码
Oct 27 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
ThinkPHP实现动态包含文件的方法
Nov 29 PHP
php一个解析字符串排列数组的方法
May 12 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
PHP页面跳转实现延时跳转的方法
Dec 10 PHP
php修改数组键名的方法示例
Apr 15 PHP
创建无限极分类树型结构的简单方法
Jun 20 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
Oct 20 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中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
php中namespace use用法实例分析
2016/01/22 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
JQuery入门—编写一个简单的JQuery应用案例
2013/01/03 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
Javascript中的call()方法介绍
2015/03/15 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
Underscore源码分析
2015/12/30 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
限时抢购-倒计时的完整实例(分享)
2017/09/17 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
ES6中异步对象Promise用法详解
2019/07/31 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
朴素贝叶斯Python实例及解析
2018/11/19 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
中专三年学习的个人自我评价
2013/12/12 职场文书
英文留学推荐信范文
2014/01/25 职场文书
个人综合鉴定材料
2014/05/23 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android