【问题标题】:Error and exception handling in php7php7中的错误和异常处理
【发布时间】:2016-05-17 21:12:45
【问题描述】:

最近移到 php7.出现以下错误:

argument 1 passed to MyClass\Throwable::exceptionHandler() must be an instance of Exception, instance of Error given

以及相应的类

namespace MyClass;

class Throwable
{
    public function exceptionHandler(\Exception $exception)
    {
        //logic here
    }
}

docs中所述

现在大多数错误都是通过抛出错误异常来报告的。

这是否意味着我必须向异常处理程序提供Error 或更一般的Throwable 的实例?

【问题讨论】:

标签: php error-handling exception-handling


【解决方案1】:

ErrorsExceptions 都扩展 Throwable 但是错误不是从 Exception 扩展的。

因此,您的 ExceptionHandler 必须接受 Throwable 类型的对象才能接受 Errors

最简单的解决方法是这样,尽管您可能需要重命名 $exception 以使其清楚。

namespace MyClass;

class Throwable
{
    public function exceptionHandler(\Throwable $exception)
    {
        //logic here
    }
}

注意:新的 Error 类不应与 ErrorException 混淆,后者通常被用作将 PHP 5 错误转换为具有语义含义的 Exception 对象的设备。

http://php.net/manual/en/class.error.php

【讨论】:

  • ErrorsExceptions 都是 Throwable 的子代;好的,如果我切换到您的解决方案,ErrorException 之间可能有什么区别?而set_exception_handler 现在提供Error 的对象?那么Exception 的用途是什么以及如何处理它们?
  • 如果您想专门处理异常而不是错误,您可以随时使用if ($throwable instanceof \Exception) { ... }。我很好奇你为什么要在那个时候以不同的方式处理它们? :)
  • 你是对的。这将是更可取的解决方案。
猜你喜欢
  • 2014-04-06
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
相关资源
最近更新 更多