PHP7 错误处理机制修改


Posted in PHP onMarch 09, 2021

一、现在有两个异常类:Exception and Error.

PHP7现在有两个异常类,Exception and Error。这两个类都实现了一个新的接口:Throwable。在您的异常处理代码中,类型暗示可能需要调整下。

 

二、一些致命错误和可恢复致命错误改为抛出Error对象。

有一些致命错误和可恢复致命错误现在改为报出Error对象。Error对象是和Exception独立的,它们无法被常规的try/catch扑获。编者按:需要注册错误处理函数,请参考下面的RFC。

对于这些已经转为异常的可恢复致命错误,已经无法通过error handler静默的忽略掉。尤其是无法忽略类型暗示错误。

 

三、语法错误会抛出一个ParseError对象

语法错误会抛出一个ParseError对象,该对象继承自Error对象。之前处理eval()的时候,对于潜在可能错误的代码除了检查返回值或者error_get_last()之外,还应该捕获ParseError对象。

 

四、内部对象的构造方法如果失败的时候总会抛出异常

内部对象的构造方法如果失败的时候总会报出异常。之前的有一些构造方法会返回NULL或者一个无法使用的对象。

 

五、一些E_STRICT错误的级别调整了。


PHP 7 错误处理

PHP 7 改变了大多数错误的报告方式。不同于 PHP 5 的传统错误报告机制,现在大多数错误被作为 Error 异常抛出。

这种 Error 异常可以像普通异常一样被 try / catch 块所捕获。如果没有匹配的 try / catch 块, 则调用异常处理函数(由 set_exception_handler() 注册)进行处理。 如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error)。

Error 类并不是从 Exception 类 扩展出来的,所以用 catch (Exception $e) { ... } 这样的代码是捕获不 到 Error 的。你可以用 catch (Error $e) { ... } 这样的代码,或者通过注册异常处理函数( set_exception_handler())来捕获 Error。

 

Error 异常层次结构

1.Error      

  • ArithmeticError      

  • AssertionError      

  • DivisionByZeroError      

  • ParseError      

  • TypeError     

2.Exception

PHP 相关文章推荐
php 常用类整理
Dec 23 PHP
关于php curl获取301或302转向的网址问题的解决方法
Jun 02 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
Feb 27 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
Jul 05 PHP
php用正则表达式匹配中文实例详解
Nov 06 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
Jan 22 PHP
php定义参数数量可变的函数用法实例
Mar 16 PHP
ThinkPHP路由机制简介
Mar 23 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
Centos7 Yum安装PHP7.2流程教程详解
Jul 02 PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 PHP
php redis setnx分布式锁简单原理解析
Oct 23 PHP
PHP7 字符串处理机制修改
Mar 09 #PHP
PHP7 整型处理机制修改
Mar 09 #PHP
PHP7 参数处理机制修改
Mar 09 #PHP
PHP7 foreach() 函数修改
Mar 09 #PHP
PHP7 list() 函数修改
Mar 09 #PHP
PHP7变量处理机制修改
Mar 09 #PHP
PHP7新特性
Mar 09 #PHP
You might like
培养自己的php编码规范
2015/09/28 PHP
二行代码解决全部网页木马
2008/03/28 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
node.js中watch机制详解
2014/11/17 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
微信小程序 弹窗输入组件的实现解析
2019/08/12 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
js实现小时钟效果
2020/03/25 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
2020/09/24 Javascript
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
捐款倡议书
2014/04/14 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
java设计模式--建造者模式详解
2021/07/21 Java/Android
python字典进行运算原理及实例分享
2021/08/02 Python
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技