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);
}
}