2016-02-08 51 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