位置: 编程技术 - 正文

PHP中register_shutdown_function函数的基础介绍与用法详解

发布时间:2023-12-07

推荐整理分享PHP中register_shutdown_function函数的基础介绍与用法详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

最近在看《PHP核心技术与最佳实践》,里面有使用到一个函数,register_shutdown_function,由于之前没有用过该函数,就去查了一下资料,就觉得是个很实用的函数,所以这里写一下这个函数的用法。下面话不多说了,来一起看看详细的介绍吧。

1. 函数说明

定义:该函数是来注册一个会在PHP中止时执行的函数

参数说明:

注册一个 callback ,它会在脚本执行完成或者 exit() 后被调用。

callback:待注册的中止回调

parameter:可以通过传入额外的参数来将参数传给中止函数

2. PHP中止的情况

PHP中止的情况有三种:

执行完成 exit/die导致的中止 发生致命错误中止

a. 第一种情况,执行完成

运行:

注意:输出的顺序,等执行完成了之后才会去执行register_shutdown_function的中止方法test

b. 第二种情况,exit/die导致的中止

运行:

后面的after并没有输出,即exit或者是die方法导致提前中止。

c. 第三种情况,发送致命错误中止

运行:

PHP中register_shutdown_function函数的基础介绍与用法详解

后面的after也是没有输出,致命错误导致提前中止了。

3. 参数

第一个参数支持以数组的形式来调用类中的方法,第二个以及后面的参数都是可以当做额外的参数传给中止方法。

也可以在类中执行:

4. 同时调用多个

可以多次调用 register_shutdown_function,这些被注册的回调会按照他们注册时的顺序被依次调用。

不过注意的是,如果在第一个注册的中止方法里面调用exit方法或者是die方法的话,那么其他注册的中止回调也不会被调用。代码:

5. 用处

该函数的作用:

析构函数:在PHP4的时候,由于类不支持析构函数,所以这个函数经常用来模拟实现析构函数

致命错误的处理:使用该函数可以用来捕获致命错误并且在发生致命错误后恢复流程处理

代码如下:

运行:

注意:PHP7中新增了Throwable异常类,这个类可以捕获致命错误,即可以使用try...catch(Throwable $e)来捕获致命错误,代码如下:

运行:

这样的话,PHP7中使用Throwable来捕获的话比使用register_shutdown_function这个函数来得更方便,也更推荐Throwable。

注意:Error类也是可以捕获到致命错误,不过Error只能捕获致命错误,不能捕获异常Exception,而Throwable是可以捕获到错误和异常的,所以更推荐。

6.巧用register_shutdown_function判断php程序是否执行完

还有一种应用场景就是:要做一个消费队列,因为某条有问题的数据导致致命错误,如果这条数据不处理掉,那么整个队列都会导致瘫痪的状态,这样可以用以下方法来解决。即:如果捕获到有问题的数据导致错误,则在回调函数中将这条数据处理掉就可以了。

php范例参考与解析:

总结

register_shutdown_function这个函数主要是用在处理致命错误的后续处理上(PHP7更推荐使用Throwable来处理致命错误),不过缺点也很明显,只能处理致命错误Fatal error,其他的错误包括最高错误Parse error也是没办法处理的。

好了,

标签: PHP中register_shutdown_function函数的基础介绍与用法详解

本文链接地址:https://www.jiuchutong.com/biancheng/275287.html 转载请保留说明!

上一篇:PHP开发实现微信退款功能示例(php能开发微信小程序吗)

下一篇:PHP 7.1中利用OpenSSL代替Mcrypt加解密的方法详解(基于php开发)

  • 盈利能力的概念及内容
  • 个人所得税的纳税方式有哪几种
  • 增值税留抵抵欠税政策解读
  • 收到发票怎么写收据
  • 出口货物离岸价格
  • 用友删除凭证后期初余额不对
  • 百旺税控盘汇总表怎么看
  • 盈利就是净利润吗
  • 话费充值发票可以入账吗
  • 代开专票收入未超30万税务怎么处理
  • 滞纳金为千分之二从何年开始实施
  • 股票印花税最新政策2023怎么算
  • 环保专项资金可以转让吗
  • 少记财务费用如何记账
  • 以提供劳务为主营业务的企业
  • 一次性收到跨期租赁费会计分录
  • 非公益性捐赠支出是永久性差异吗
  • 个人股权转让申报表
  • 三证合一之前
  • 公司购买的矿泉水属于什么科目
  • 关于不动产进项税额分期抵扣的新政策,以下不属于
  • 个税申报所属期和所得期
  • 业务宣传费和广告费计入什么科目
  • 如何进行网络测试网速测试
  • 如何办理存款证明
  • 企业收到的政府补贴,怎么入账
  • 员工两处取得的荣誉
  • 发票金额大于报销金额可以吗
  • 工资达到起征点 报税时没有税款
  • 如何限制某台设备上网
  • BIOS里没有USB-HDD选项
  • 坏坏狼故事绘本
  • system占用cpu过高怎么解决
  • 资产减值准备怎么影响利润
  • 自创商誉的确认
  • 房地产企业哪些成本上升了
  • 海带下载
  • codecline
  • 房地产公司收房款怎么分录
  • 销售费用可以开专票吗
  • web前端面试题2021及答案
  • vuecli配置代理
  • 深度学习参数初始化(二)Kaiming初始化 含代码
  • 帝国cms app
  • 酒店押金的账务处理
  • 将织梦dedecms转换到wordpress
  • 试运行收入账务处理
  • 土地出让金的范围是什么
  • 车间用的液化气计入什么科目
  • 企业发生的直接进入当期损益的期间费用包括
  • 2021年股权变更要怎么办理?
  • sql 数据计算
  • sql server 实例
  • 以公允价值计量计入其他综合收益
  • 企业重组后的债权怎么处理
  • 存货 跌价
  • 固定资产多少钱算固定资产
  • 植物售卖
  • 在建工程什么时候用
  • 事业单位之间
  • 少做收入第二年怎么算
  • 待抵扣税额转入进项税额的分录
  • 小企业会计怎么做账
  • 商业企业注销应检查哪方面的问题
  • mysql 常用
  • sql游标实例
  • windows许可证即将过期怎么办知乎
  • window部署服务
  • win10mobile现在能干吗
  • service.exe是什么
  • cocos2dx schedule
  • 什么叫懒加载
  • Python安装包
  • unity游戏开发简历
  • unity怎么录屏
  • python for循环删除元素
  • js全局变量怎么定义
  • python怎么用的
  • 土地增值税清算退税涉及企业所得税补缴
  • 杭州市税务局举报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号