2016-02-08 50 views
4

处理最近搬到PHP7。出现以下错误:错误和异常的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异常处理程序?

+1

看看https://trowski.com/2015/06/24/throwable-exceptions-and-errors-in-php7/它可以帮助你 –

回答

2

ErrorsExceptions都延伸Throwable但是错误不从Exception延伸。

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

简单的解决办法是这样的,虽然你可能需要重命名$例外讲清楚。

namespace MyClass; 

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

注意:新Error类不应该与已经classicly被用作设备转向PHP 5级的错误为Exception对象与symantic意义的ErrorException被confussed。

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

+0

两个'Errors'和'例外'是'Throwable'的孩子;好吧,如果我切换到您的解决方案可能是什么'Error'和'Exception'之间的区别?而'set_exception_handler'现在提供'Error'的对象?那么,什么是“例外”,他们是如何处理的? – sitilge

+0

如果你想专门处理异常,而不是一个错误,你总是可以做'如果($抛出的instanceof \除外){...}'。我很好奇,为什么你想在这个时候以不同的方式处理它们呢? :) – DanielM

+0

你是对的。这将是更好的解决方案。 – sitilge