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 相关文章推荐
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
Apr 18 PHP
30 个很棒的PHP开源CMS内容管理系统小结
Oct 14 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
php获取网页请求状态程序示例
Jun 17 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
eclipse php wamp配置教程
Jun 30 PHP
php通过header发送自定义数据方法
Jan 18 PHP
PHP 计算两个特别大的整数实例代码
May 07 PHP
PHP children()函数讲解
Feb 03 PHP
laravel实现上传图片并在页面显示的例子
Oct 14 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 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 ajax 分页类代码
2008/11/13 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
几个有趣的Javascript Hack
2010/07/24 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
全面解析Javascript无限添加QQ好友原理
2016/06/15 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
js断点调试经验分享
2017/12/08 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
Python装饰器使用示例及实际应用例子
2015/03/06 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
Python生成8位随机字符串的方法分析
2017/12/05 Python
获取python文件扩展名和文件名方法
2018/02/02 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
Django实现随机图形验证码的示例
2020/10/15 Python
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
后勤自我鉴定
2013/10/13 职场文书
总务岗位职责
2013/11/19 职场文书
导师评语大全
2014/04/26 职场文书
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android