public function ErrorHandler::handleFatal

File

drupal/core/vendor/symfony/debug/Symfony/Component/Debug/ErrorHandler.php, line 128

Class

ErrorHandler
ErrorHandler.

Namespace

Symfony\Component\Debug

Code

public function handleFatal() {
  if (null === ($error = error_get_last())) {
    return;
  }
  unset($this->reservedMemory);
  $type = $error['type'];
  if (0 === $this->level || !in_array($type, array(
    E_ERROR,
    E_CORE_ERROR,
    E_COMPILE_ERROR,
    E_PARSE,
  ))) {
    return;
  }
  if (isset(self::$loggers['emergency'])) {
    $fatal = array(
      'type' => $type,
      'file' => $error['file'],
      'line' => $error['line'],
    );
    self::$loggers['emergency']
      ->emerg($error['message'], $fatal);
  }
  if (!$this->displayErrors) {
    return;
  }

  // get current exception handler
  $exceptionHandler = set_exception_handler(function () {
  });
  restore_exception_handler();
  if (is_array($exceptionHandler) && $exceptionHandler[0] instanceof ExceptionHandler) {
    $level = isset($this->levels[$type]) ? $this->levels[$type] : $type;
    $message = sprintf('%s: %s in %s line %d', $level, $error['message'], $error['file'], $error['line']);
    $exception = new FatalErrorException($message, 0, $type, $error['file'], $error['line']);
    $exceptionHandler[0]
      ->handle($exception);
  }
}