PHP 自动加载类原理与用法实例分析


Posted in PHP onApril 14, 2020

本文实例讲述了PHP 自动加载类原理与用法。分享给大家供大家参考,具体如下:

类的自动加载 (Autoloading Classes)

在编写面向对象(OOP) 程序时,很多开发者为每个类新建一个 PHP 文件。 这会带来一个烦恼:每个脚本的开头,都需要包含(include)一个长长的列表(每个类都有个文件)。

在 PHP 5 中,已经不再需要这样了。 spl_autoload_register() 函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(interface)时自动去加载。通过注册自动加载器,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

Tip

尽管 __autoload() 函数也能自动加载类和接口,但更建议使用 spl_autoload_register() 函数。spl_autoload_register() 提供了一种更加灵活的方式来实现类的自动加载(同一个应用中,可以支持任意数量的加载器,比如第三方库中的)。因此,不再建议使用 __autoload() 函数,在以后的版本中它可能被弃用。

Note:

在 PHP 5.3 之前,__autoload 函数抛出的异常不能被 catch 语句块捕获并会导致一个致命错误(Fatal Error)。 自 PHP 5.3 起,能够 thrown 自定义的异常(Exception),随后自定义异常类即可使用。 __autoload 函数可以递归的自动加载自定义异常类。

Note:

自动加载不可用于 PHP 的 CLI 交互模式。

Note:

如果类名比如被用于 call_user_func(),则它可能包含一些危险的字符,比如 ../。 建议您在这样的函数中不要使用用户的输入,起码需要在 __autoload() 时验证下输入。

自动加载示例

ClassInterface.php

<?php
interface ClassInterface {
  public function print();
  public function get_current_time();
}

MyClass1.php

<?php
class MyClass1 implements ClassInterface
{
  public $flag = 'MyClass1';

  public function print() {
    echo $this->flag;
  }

  public function get_current_time() {
    echo $this->flag . " : " . date("Y-m-d H:i:s",time());
  }
  
}

MyClass2.php

<?php
class MyClass2 implements ClassInterface
{
  public $flag = 'MyClass2';

  public function print() {
    echo "MyClass2";
  }

  public function get_current_time() {
    echo $this->flag . " : " . date("Y-m-d H:i:s",time());
  }
  
}

autoload.php

<?php
date_default_timezone_set('Asia/Shanghai');
spl_autoload_register(function ($class_name) {
  require_once $class_name . '.php';
});

$obj = new MyClass1();
$obj2 = new MyClass2();
$obj->print();
echo "<br>";
$obj->get_current_time();
echo "<br>";
$obj2->print();
echo "<br>";
$obj2->get_current_time();

 输出结果:

PHP 自动加载类原理与用法实例分析

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP中strtotime函数使用方法分享
Jan 10 PHP
基于PHP常用字符串的总结(待续)
Jun 07 PHP
PHP中的Memcache详解
Apr 05 PHP
PHP curl实现抓取302跳转后页面的示例
Jul 04 PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 PHP
php使用socket post数据到其它web服务器的方法
Jun 02 PHP
php操作MongoDB类实例
Jun 17 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
php表单加入Token防止重复提交的方法分析
Oct 10 PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 PHP
PHP7多线程搭建教程
Apr 21 PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 PHP
php操作redis常见方法示例【key与value操作】
Apr 14 #PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 #PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 #PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
Apr 13 #PHP
PHP 对象接口简单实现方法示例
Apr 13 #PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 #PHP
yii2.0框架多模型操作示例【添加/修改/删除】
Apr 13 #PHP
You might like
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
PHP 可阅读随机字符串代码
2010/05/26 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
jquery ajax abort()的使用方法
2010/10/28 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
Node.js原生api搭建web服务器的方法步骤
2019/02/15 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
详解Python的Django框架中的templates设置
2015/05/11 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
Python文件操作基础流程解析
2020/03/19 Python
最新的大学生找工作自我评价
2013/09/29 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
React自定义hook的方法
2022/06/25 Javascript