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 相关文章推荐
Apache2 httpd.conf 中文版
Nov 17 PHP
理解php Hash函数,增强密码安全
Feb 25 PHP
在smarty中调用php内置函数的方法
Feb 07 PHP
PHP Global变量定义当前页面的全局变量实现探讨
Jun 05 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
JavaScript创建命名空间的5种写法
Jun 24 PHP
php抓取并保存网站图片的实现代码
Oct 28 PHP
Yii快速入门经典教程
Dec 28 PHP
php操作路径的经典方法(必看篇)
Oct 04 PHP
Yii2 加载css、js 载静态资源的方法
Mar 10 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
Apr 06 PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 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 在线导入mysql大数据程序
2015/06/11 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
JavaScript 三种创建对象的方法
2009/10/16 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
jQuery实现html元素拖拽
2015/07/21 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
javascript用defineProperty实现简单的双向绑定方法
2020/04/03 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
2020/09/21 Javascript
python在linux中输出带颜色的文字的方法
2014/06/19 Python
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
简单实现python数独游戏
2018/03/30 Python
java中两个byte数组实现合并的示例
2018/05/09 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
财务会计专业个人求职信范本
2014/01/08 职场文书
小加工厂管理制度
2014/01/21 职场文书
骨干教师考核方案
2014/05/09 职场文书
人事任命书范文
2014/06/04 职场文书
班组长安全工作职责
2014/07/15 职场文书
少先队活动总结
2014/08/29 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
JavaScript流程控制(分支)
2021/12/06 Javascript
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js