• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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      

    2.Exception

    ...

    实例

    ?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程序设计有所帮助。

    您可能感兴趣的文章:
    • MacOS下PHP7.1升级到PHP7.4.15的方法
    • php7和php5具体区别实例讲解
    • PHP7原生MySQL数据库操作实现代码
    • php7 参数、整形及字符串处理机制修改实例分析
    • php7 list()、session及其他模块的修改实例分析
    • php5.6.x到php7.0.x特性小结
    • PHP7.1实现的AES与RSA加密操作示例
    • php7函数,声明,返回值等新特性介绍
    • 可兼容php5与php7的cURL文件上传功能实例分析
    • php7和php5的详细对比
    上一篇:php7 list()、session及其他模块的修改实例分析
    下一篇:php7 参数、整形及字符串处理机制修改实例分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

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