目录
前言
概述
错误的层级结构
PHP RFC
Throwable Interface
Exceptions in the engine (for PHP 7)
Reclassify E_STRICT notices
首页 后端开发 php教程 详细介绍PHP7的异常处理代码示例

详细介绍PHP7的异常处理代码示例

Mar 11, 2017 am 09:22 AM

前言

PHP7的改动中,影响比较大的,包括异常处理

概述

更多的异常是直接通过PHP直接处理的,和之前的PHP5不同的是更多的异常是通过Error exceptions来抛出。

作为一个普通的扩展,Error exceptions会持续冒出直到匹配到对应的catch块。如果没有进行匹配,就会触发被设置的set_exception_handler()来执行处理,如果没有默认的异常处理程序,则该异常将被转换为一个致命错误,并且将被像一个传统的错误被处理。

由于Error在错误层次结构不继承异常,像这样的代码catch (Exception $e) { ... }在PHP5中并不会捕获到对应的异常。我们可以用代码catch (Error $e) { ... }或者 set_exception_handler(),来对Error进行处理。

错误的层级结构

  • Throwable

    • ….

    • ArithmeticError 算数错误

    • AssertionError 声明错误

    • ParseError 解析错误

    • TypeError 类型错误

    • pisionByZeroError 除数为0的错误

    • Error 错误

    • Exception 异常

PHP RFC

Throwable Interface

function add(int $left, int $right) {
    return $left + $right;
}try {    echo add('left', 'right');
} catch (Exception $e) {    // Handle exception} catch (Error $e) { // Clearly a different type of object
    // Log error and end gracefully
    var_dump($e);
}
登录后复制

这里,并没有出现服务器500的错误。原因在于,PHP7中的Error把它拦截住了,没有冒泡在服务器中。

object(TypeError)#1 (7) {
  ["message":protected]=>  
  string(139) "Argument 1 passed to add() must be of the type integer, string given, called in /Applications/mamp/apache2/htdocs/curl/error.php on line 14"
  ["string":"Error":private]=>  string(0) ""
  ["code":protected]=>  int(0)
  ["file":protected]=>  string(48) "/Applications/mamp/apache2/htdocs/curl/error.php"
  ["line":protected]=>  int(9)
  ["trace":"Error":private]=>
  array(1) {
    [0]=>
    array(4) {
      ["file"]=>      string(48) "/Applications/mamp/apache2/htdocs/curl/error.php"
      ["line"]=>      int(14)
      ["function"]=>      string(3) "add"
      ["args"]=>
      array(2) {
        [0]=>        string(4) "left"
        [1]=>        string(5) "right"
      }
    }
  }
  ["previous":"Error":private]=>
  NULL
}
登录后复制

这样我们就可以通过日志的方式记录他们。

Exceptions in the engine (for PHP 7)

function call_method($obj) {
    $obj->method();
}try {
    call_method(null);
     // oops!
     } 
     catch (EngineException $e) {    
    echo "Exception: {$e->getMessage()}\n";
}//其实上面的例子我在运行过程中,并没有被EngineException捕获异常,经过测试,也是通过Error进行的错误的拦截
登录后复制

如果异常没有被捕获,PHP将继续担任目前它抛出同样的致命错误。

Reclassify E_STRICT notices


以上是详细介绍PHP7的异常处理代码示例的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
C++ 异常处理如何支持自定义错误处理例程? C++ 异常处理如何支持自定义错误处理例程? Jun 05, 2024 pm 12:13 PM

C++异常处理允许创建自定义错误处理例程,通过抛出异常并使用try-catch块捕捉异常来处理运行时错误。1.创建一个派生自exception类的自定义异常类并覆盖what()方法;2.使用throw关键字抛出异常;3.使用try-catch块捕捉异常并指定可以处理的异常类型。

C++ Lambda 表达式如何进行异常处理? C++ Lambda 表达式如何进行异常处理? Jun 03, 2024 pm 03:01 PM

C++Lambda表达式中的异常处理没有自己的作用域,默认不捕获异常。要捕获异常,可以使用Lambda表达式捕获语法,它允许Lambda表达式捕获其定义范围内的变量,从而在try-catch块中进行异常处理。

您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? 您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? Apr 05, 2025 am 12:03 AM

在PHP中,异常处理通过try,catch,finally,和throw关键字实现。1)try块包围可能抛出异常的代码;2)catch块处理异常;3)finally块确保代码始终执行;4)throw用于手动抛出异常。这些机制帮助提升代码的健壮性和可维护性。

如何在系统重启后自动设置unixsocket的权限? 如何在系统重启后自动设置unixsocket的权限? Mar 31, 2025 pm 11:54 PM

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...

在Docker环境中使用PECL安装扩展时为什么会报错?如何解决? 在Docker环境中使用PECL安装扩展时为什么会报错?如何解决? Apr 01, 2025 pm 03:06 PM

在Docker环境中使用PECL安装扩展时报错的原因及解决方法在使用Docker环境时,我们常常会遇到一些令人头疼的问�...

PHP异常处理:通过异常追踪了解系统行为 PHP异常处理:通过异常追踪了解系统行为 Jun 05, 2024 pm 07:57 PM

PHP异常处理:通过异常追踪了解系统行为异常是PHP用于处理错误的机制,由异常处理程序处理异常。异常类Exception代表一般异常,而Throwable类代表所有异常。使用throw关键字抛出异常,并使用try...catch语句定义异常处理程序。实战案例中,通过异常处理捕获并处理calculate()函数可能抛出的DivisionByZeroError,确保应用程序在出现错误时也能优雅地失败。

C++ 技术中的异常处理:如何在多线程环境中正确处理异常? C++ 技术中的异常处理:如何在多线程环境中正确处理异常? May 09, 2024 pm 12:36 PM

在多线程C++中,异常处理遵循以下原则:及时性、线程安全和明确性。实战中,可以通过使用mutex或原子变量来确保异常处理代码线程安全。此外,还要考虑异常处理代码的重入性、性能和测试,以确保其在多线程环境中安全有效地运行。

如何在同一台服务器上通过Nginx配置让PHP5.6和PHP7共存? 如何在同一台服务器上通过Nginx配置让PHP5.6和PHP7共存? Apr 01, 2025 pm 03:15 PM

在同一系统中同时运行多个PHP版本是一个常见的需求,特别是当不同项目依赖于不同版本的PHP时。如何在同一台...

See all articles