php7 错误处理机制修改实例分析

 更新时间:2020年05月25日 09:58:50   作者:人生如初见_张默  
这篇文章主要介绍了php7 错误处理机制修改,结合实例形式分析了php7 错误处理机制修改相关原理、操作技巧与注意事项,需要的朋友可以参考下

本文实例讲述了php7 错误处理机制修改。分享给大家供大家参考,具体如下:

一、现在有两个异常类: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

...

1458887252-2773-exception-hiearchy.jpg

实例

<?php c
lass MathOperations {  
 protected $n = 10;  // 求余数运算,除数为 0,抛出异常  
public function doOperation(): string  {    
try {     
$value = $this->n % 0;     
return $value;    
} catch (DivisionByZeroError $e) {     
return $e->getMessage();    
}  
} } 
$mathOperationsObj = new MathOperations();
 print($mathOperationsObj->doOperation()); 
?>

以上程序执行输出结果为:

Modulo by zero

PHP 7 异常

PHP 7 异常用于向下兼容及增强旧的assert()函数。它能在生产环境中实现零成本的断言,并且提供抛出自定义异常及错误的能力。

老版本的API出于兼容目的将继续被维护,assert()现在是一个语言结构,它允许第一个参数是一个表达式,而不仅仅是一个待计算的 string或一个待测试的boolean。

assert() 配置

配置项 默认值 可选值
zend.assertions 1
  • 1 - 生成和执行代码 (开发模式)

  • 0 - 生成代码,但在执行时跳过它

  • -1 - 不生成代码 (生产环境)

assert.exception 0
  • 1 - 断言失败时抛出,可以抛出异常对象,如果没有提供异常,则抛出 AssertionError 对象实例。

  • 0 - 使用或生成 Throwable, 仅仅是基于对象生成的警告而不是抛出对象(与 PHP 5 兼容)

参数

assertion

断言。在 PHP 5 中,是一个用于执行的字符串或者用于测试的布尔值。在 PHP 7 中,可以是一个返回任何值的表达式, 它将被执行结果用于指明断言是否成功。

description

如果 assertion 失败了,选项 description 将会包括在失败信息里。

exception

在 PHP 7 中,第二个参数可以是一个       Throwable 对象,而不是一个字符串,如果断言失败且启用了 assert.exception 该对象将被抛出。

实例

将 zend.assertions 设置为 0:

<?php 
ini_set('zend.assertions', 0); 
assert(true == false); 
echo 'Hi!'; 
?>

以上程序执行输出结果为:

Hi!

将 zend.assertions 设置为 1,assert.exception 设置为 1:

实例

<?php 
ini_set('zend.assertions', 1); 
ini_set('assert.exception', 1); 
assert(true == false); echo 'Hi!';
?>

以上程序执行输出结果为:

Fatal error: Uncaught AssertionError: 
assert(true == false) in -:2Stack trace:#0 -(2): 
assert(false, 'assert(true == ...')#1 {main} 
 thrown in - on line 2

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP错误与异常处理方法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

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

相关文章

  • JSON在PHP中的应用介绍

    JSON在PHP中的应用介绍

    目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。故整理一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识
    2012-09-09
  • php计算title标题相似比的方法

    php计算title标题相似比的方法

    这篇文章主要介绍了php计算title标题相似比的方法,实例分析了php中similar_text方法计算字符串相似度的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • php 图片上添加透明度渐变的效果

    php 图片上添加透明度渐变的效果

    今天因为临时需要,要动态的在图片上添加透明度渐变的效果,在网上找了半天没有相应功能的算法....
    2009-06-06
  • php查询ip所在地的方法

    php查询ip所在地的方法

    这篇文章主要介绍了php查询ip所在地的方法,涉及对纯真ip数据库的实用,是非常常见的实用技巧,需要的朋友可以参考下
    2014-12-12
  • MySQL时间字段究竟使用INT还是DateTime的说明

    MySQL时间字段究竟使用INT还是DateTime的说明

    今天解析DEDECMS时发现deder的MYSQL时间字段,都是用INT类型,随后又在网上找到这篇文章,看来如果时间字段有参与运算,用int更好,一来检索时不用在字段上转换运算,直接用于时间比较!二来如下所述效率也更高
    2012-02-02
  • PHP中用正则表达式清除字符串的空白

    PHP中用正则表达式清除字符串的空白

    我们经常会处理来自用户输入或从数据库中读取的数据,可能在你的字符串中有多余的空白或制表符,回车等。存储这些额外的字符是有点浪费空间的。
    2011-01-01
  • php各种编码集详解和以及在什么情况下进行使用

    php各种编码集详解和以及在什么情况下进行使用

    字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
    2011-09-09
  • php之curl设置超时实例

    php之curl设置超时实例

    这篇文章主要介绍了php中curl设置超时的方法,实例讲述了curl中各种超时设置的方法,非常具有实用价值,需要的朋友可以参考下
    2014-11-11
  • 解决FastCGI 进程超过了配置的活动超时时限的问题

    解决FastCGI 进程超过了配置的活动超时时限的问题

    本篇文章是对解决FastCGI 进程超过了配置的活动超时时限的方法进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • PHP使用观察者模式处理异常信息的方法详解

    PHP使用观察者模式处理异常信息的方法详解

    这篇文章主要介绍了PHP使用观察者模式处理异常信息的方法,结合实例形式详细分析了php观察者模式处理异常信息相关原理、实现方法及操作注意事项,需要的朋友可以参考下
    2019-09-09

最新评论