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中根据某年第几天计算出日期年月日的代码
Feb 24 PHP
如何用php生成扭曲及旋转的验证码图片
Jun 07 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
Cygwin中安装PHP方法步骤
Jul 04 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
Dec 22 PHP
Joomla数据库操作之JFactory::getDBO用法
May 05 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 10 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
php写入mysql中文乱码的实例解决方法
Sep 17 PHP
如何理解PHP核心特性命名空间
May 28 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/12/06 PHP
php 静态变量的初始化
2009/11/15 PHP
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
2007/08/19 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
python中的全局变量用法分析
2015/06/09 Python
Python端口扫描简单程序
2016/11/10 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
Python 修改列表中的元素方法
2018/06/26 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
高二英语教学反思
2014/01/19 职场文书
冬季施工防火方案
2014/05/17 职场文书
单位接收证明格式
2015/06/18 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript