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 相关文章推荐
PHP 编程请选择正确的文本编辑软件
Dec 21 PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
Nov 24 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
php如何实现只替换一次或N次
Oct 29 PHP
PHP Filter过滤器全面解析
Aug 09 PHP
php结合redis高并发下发帖、发微博的实现方法
Dec 15 PHP
yii框架redis结合php实现秒杀效果(实例代码)
Oct 26 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
Laravel中正确地返回HTTP状态码方法示例
Sep 10 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
Yii框架form表单用法实例
2014/12/04 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
tagName的使用,留一笔
2006/06/26 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
表单元素的submit()方法和onsubmit事件应用概述
2013/02/01 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
python修改注册表终止360进程实例
2014/10/13 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
pybind11在Windows下的使用教程
2019/07/04 Python
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
涉外文秘个人求职的自我评价
2013/10/07 职场文书
护理专业个人求职简历的自我评价
2013/10/13 职场文书
30年同学聚会感言
2014/01/30 职场文书
中秋寄语大全
2014/04/11 职场文书
班子查摆四风个人对照检查材料思想汇报
2014/10/04 职场文书
教师个人师德总结
2015/02/06 职场文书
安全教育片观后感
2015/06/17 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
Javascript中async与await的捕捉错误详解
2022/03/03 Javascript