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 не перехватывается и не создаётся в логе запись, а если закоментить эту функцию, то всё отлично.