2016-02-05 3 views
2

Кажется, я нашел ошибку, чтобы php7.0.3, но я не уверен, что, вероятно, проблема на моей стороне, так что я решил написать здесь первыйPHP7 set_exception_handler и set_error_handler обратные вызовы смешиваются

я недавно обновил свой версия сервера php к в php7.0.3, и, конечно, не было ошибок около устаревшего метода и т.д. я был закрепляющие их один за другим, пока я пришел к этому один

Uncaught TypeError: Argument 1 passed to Debug::_exceptionHandler() must be an instance of Exception, instance of Error given in SomePath\Debug.php:518 Stack trace: #0 [internal function]: Debug::_exceptionHandler(Object(Error)) #1 {main} thrown

я проверил Debug класс и нашел там set_exception_handler и set_error_handler звонки в function enable()

public static function enable(..some params..){ 
    ... 
    set_exception_handler(array(__CLASS__, '_exceptionHandler')); 
    set_error_handler(array(__CLASS__, '_errorHandler')); 
} 

// where _exceptionHandler function defined as 
public static function _exceptionHandler(Exception $exception) 
{ ... } 

// and _errorHandler defined as 
public static function _errorHandler($severity, $message, $file, $line, $context) 
{ ... } 

Собственно ошибка ясно для меня это говорит, что он не может передать Error объект типа к _exceptionHandler как это excepts Exception типа, но Вопрос является Почему он пытается передать его _exceptionHandler вместо _errorHandler как он также определен? это ошибка или я что-то упустил в определении error и exception обработчиков?

Примечание: я пытался играть с set_error_handler передать его в качестве второго аргумента E_ALL и т.д., но отмечая помогает ...

я получил ошибку, которая была брошенную и должны быть обработаны с помощью _errorHandler, но вместо этого обрабатывается _exceptionHandler было

Uncaught Error: Call to undefined function set_magic_quotes_runtime() in SomePath...

Может кто-нибудь помочь мне с этим?

Благодаря

ответ

4

Иерархия исключений в PHP 7 изменилось, если вы посмотрите на manual page для set_exception_handler вы заметите:

Since PHP 7, most errors are reported by throwing Error exceptions, which will be caught by the handler as well. Both Error and Exception implements the Throwable interface. This is the handler signature since PHP 7:

void handler (Throwable $ex); 

Сведения об изменениях в иерархии исключений в PHP 7 можно найти here.

+0

На самом деле я проверил страницу 'set_exception_handler' и заметил это сообщение, теперь я получил его и понял причину спасибо – Armen

Смежные вопросы