Итак, чтобы понять, о чем говорит Уэсти, важная часть в том, что у вас может быть только один обработчик ошибок, а функция set_error_handler () возвращает ранее определенный обработчик ошибок, или ноль, если ни один из них не был определен.Поэтому в ваших обработчиках ошибок, возможно, используйте класс, который сохраняет предыдущий обработчик ошибок при его регистрации, чтобы при обработке ошибок с помощью метода класса также вызывался предыдущий обработчик ошибок.Выдержка из клиента raven-php Sentry:
public function registerErrorHandler($call_existing_error_handler = true, $error_types = -1)
{
$this->error_types = $error_types;
$this->old_error_handler = set_error_handler(array($this, 'handleError'), error_reporting());
$this->call_existing_error_handler = $call_existing_error_handler;
}
, а затем метод ошибки дескриптора:
public function handleError($code, $message, $file = '', $line = 0, $context=array())
{
if ($this->error_types & $code & error_reporting()) {
$e = new ErrorException($message, 0, $code, $file, $line);
$this->handleException($e, true, $context);
}
if ($this->call_existing_error_handler && $this->old_error_handler) {
call_user_func($this->old_error_handler, $code, $message, $file, $line, $context);
}
}