PHP set_error_handler мешает записывать throw

Перехватываю ошибки и исключения. Ошибки перехватываю так:

// Обработчик ошибок
set_error_handler(
/**
* @throws ErrorException 
*/
callback: function (int $errno, string $errstr, string $errfile, int $errline): bool {

        // Если ошибка не критичная
        if (!($errno & error_reporting()))
            // - возвращаем false
            return false;

        // Может потребоваться экранирование $errstr:
        $errstr = htmlspecialchars($errstr);

        // Перечисляем известные ошибки и выводим их
        switch ($errno) {
            case E_ERROR:
            case E_CORE_ERROR:
            case E_COMPILE_ERROR:
            case E_PARSE:
            case E_USER_ERROR:
                throw new ErrorException(message: $errstr, code: $errno, filename: $errfile, line: $errline);

            case E_USER_WARNING:
            case E_CORE_WARNING:
            case E_COMPILE_WARNING:
            case E_WARNING:
                $this->Add(MessageType::Warning, "[$errno] $errstr");
                break;

            case E_USER_NOTICE:
            case E_NOTICE:
                $this->Add(MessageType::Info, "[$errno] $errstr");
                break;

            default:
                $this->Add(MessageType::Error, "Неизвестная ошибка [$errno] $errstr");
                break;
        }

        // Не запускаем внутренний обработчик ошибок PHP
        return true;

    });

При бросании throw exception не перехватывается и не создаётся в логе запись, а если закоментить эту функцию, то всё отлично.


Ответы (0 шт):