PHP自动载入类文件函数__autoload的使用方法


Posted in PHP onMarch 25, 2019

开发面向对象的应用程序时,往往要对每个类的定义建立一个 PHP 源文件。这样的做法产生的一个很大的烦恼就是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表。

在PHP开发的系统中,当在一个文件中需要调用另一个PHP文件中声明的类时,就需要通过include或require把这个文件引入。不过有的时候,在文件众多的项目中,要一一将所需类的文件都包含进来,是一个让人很头疼的事,所以我们能不能在用到什么类的时候,再把这个类所在的php文件导入呢?这就是我们这里我们要讲的自动加载类。

在 PHP 5 中,可以定义一个 __autoload()函数,它会在试图使用尚未被定义的类时自动调用,通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类, __autoload()函数接收的一个参数,就是你想加载的类的类名,所以你做项目时,在组织定义类的文件名时,需要按照一定的规则,最好以类名为中心,也可以加上统一的前缀或后缀形成文件名,比如 xxx_classname.phpclassname_xxx.php以及就是classname.php等等。

我们以一个例子来说明一下__autoload 的使用方法,下面分别从 ClassA.php 和 ClassB.php 文件中加载 ClassA 和 ClassB 类

<?php
//定义一个类ClassA,文件名为ClassA.php
class ClassA{
 public function __construct(){
 echo "ClassA load success!";
 }
}
?>
<?php
//定义一个类ClassB,文件名为ClassB.php,ClassB继承ClassA
class ClassB extends ClassA {
 public function __construct(){
 echo "ClassB load success!";
 }
}
?>
<?php
function __autoload($classname)
{
 $classpath="./".$classname.'.php';
 if(file_exists($classpath)){
 require_once($classpath);
 }
 else{
 echo 'class file'.$classpath.'not found!';
 }
}
//ClassA类不存在时,自动调用__autoload()函数,传入参数”ClassA”
$obj = new ClassA();
//ClassB类不存在时,自动调用__autoload()函数,传入参数”ClassB”
$obj2 = new ClassB();
?>

能过上面的例子,我们发现在使用ClassA和ClassB时,我们并没有手动引入ClassA.php和ClassB.php文件,但却能正常使用这两个类,可见__autoload是多么地好用。

但在使用__autoload时也要注意一些问题,比如上面的ClassB类,它是继承了ClassA类,如果这时ClassA和ClassB不在同一个目录时就会出错,所以建议把所有存在extends关系的类放在同一个文件目录下,或者在实例化一个继承类的时候在文件中手工包含被继承的类。还有一点就是在使用自动载入函数时一定要注意类名与文件名的对应关系。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
非常不错的MySQL优化的8条经验
Mar 24 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
深入apache host的配置详解
Jun 09 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
Aug 10 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
php实现的百度搜索某地天气的小偷代码
Apr 23 PHP
PHP生成和获取XML格式数据的方法
Mar 04 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
Nov 06 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
Dec 07 PHP
PHP生成短网址的思路以及实现方法的详解
Mar 25 #PHP
PHP错误提示It is not safe to rely on the system……的解决方法
Mar 25 #PHP
mongodb和php的用法详解
Mar 25 #PHP
PHP随机数函数rand()与mt_rand()的讲解
Mar 25 #PHP
php微信扫码支付 php公众号支付
Mar 24 #PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 #PHP
详解PHP变量传值赋值和引用赋值变量销毁
Mar 23 #PHP
You might like
php仿discuz分页效果代码
2008/10/02 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
js+数组实现网页上显示时间/星期几的实用方法
2013/01/18 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
node.js中的console用法总结
2014/12/15 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
Django异步任务之Celery的基本使用
2019/03/23 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
python 实现逻辑回归
2020/12/30 Python
Tory Burch德国官网:美国时尚生活品牌
2018/01/03 全球购物
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
诚信承诺书模板
2014/05/26 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
三八妇女节寄语
2015/02/27 职场文书
python爬虫框架feapde的使用简介
2021/04/20 Python
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python