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 中的一些经验积累
Oct 09 PHP
复杂检索数据并分页显示的处理方法
Oct 09 PHP
PHP 类相关函数的使用详解
May 10 PHP
php漏洞之跨网站请求伪造与防止伪造方法
Aug 15 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
PHP+jQuery+Ajax实现用户登录与退出
Apr 27 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
Jun 30 PHP
PHP页面输出搜索后跳转下一页的处理方法
Sep 30 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 PHP
php7 list()、session及其他模块的修改实例分析
May 25 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个人网站架设连环讲(四)
2006/10/09 PHP
php强制下载类型的实现代码
2011/04/21 PHP
twig里使用js变量的方法
2016/02/05 PHP
javascript 播放器 控制
2007/01/22 Javascript
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
python中的yield使用方法
2014/02/11 Python
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
python装饰器decorator介绍
2014/11/21 Python
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
django1.8使用表单上传文件的实现方法
2016/11/04 Python
Python开发的HTTP库requests详解
2017/08/29 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
python selenium firefox使用详解
2019/02/26 Python
python flask框架实现重定向功能示例
2019/07/02 Python
Python3 批量扫描端口的例子
2019/07/25 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
pytorch GAN伪造手写体mnist数据集方式
2020/01/10 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
2020/02/24 Python
Python实现企业微信机器人每天定时发消息实例
2020/02/25 Python
Python PIL库图片灰化处理
2020/04/07 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
大学社团招新的通讯稿
2014/09/10 职场文书
广播体操比赛主持词
2015/06/29 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
Python3 类型标注支持操作
2021/06/02 Python