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
PHP 命令行参数详解及应用
May 18 PHP
php自动获取字符串编码函数mb_detect_encoding
May 31 PHP
php代码收集表单内容并写入文件的代码
Jan 29 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 PHP
PHP图片处理之图片背景、画布操作
Nov 19 PHP
php判断文件上传类型及过滤不安全数据的方法
Dec 17 PHP
php随机抽奖实例分析
Mar 04 PHP
php bootstrap实现简单登录
Mar 08 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
Apr 12 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 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
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
FF IE兼容性的修改小结
2009/09/02 Javascript
Javascript 去除数组的重复元素
2010/05/04 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
原始XMLHttpRequest方法详情回顾
2013/11/28 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
Python开发编码规范
2006/09/08 Python
Python help()函数用法详解
2014/03/11 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
Python中six模块基础用法
2019/12/08 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
keras读取h5文件load_weights、load代码操作
2020/06/12 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
树转促学习心得体会
2014/09/10 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
python实现ROA算子边缘检测算法
2021/04/05 Python
深度学习详解之初试机器学习
2021/04/14 Python
python如何为list实现find方法
2022/05/30 Python