Недавно я наткнулся на некоторый код, который использовал собственный обработчик ошибок, чтобы превратить любые ошибки PHP в обобщенное исключение приложения.Также был определен пользовательский обработчик исключений, который будет регистрировать исключение, если оно находится в пределах определенного диапазона кодов ошибок.Пример:
class AppException extends Exception
{
}
function error_handler($errno, $errstr, $errfile, $errline)
{
throw new AppException($errstr, $errno);
}
function exception_handler($exception)
{
$min = ...;
$max = ...;
if ($exception->getCode() >= $min && $exception->getCode() <= $max)
{
// log exception
}
}
set_error_handler('error_handler');
set_exception_handler('exception_handler');
$a[1]; // throws exception
Проблема в том, что я видел такие вещи как:
try
{
do_something();
}
catch (AppException $exception)
{
}
Что подразумевает отсутствие различий между фактическими ошибками программирования и «исключительным» поведением.После дальнейшего изучения я натолкнулся на части кода, которые были разработаны вокруг идеи, что ошибки PHP представляют собой «исключительное» поведение, такое как:
...
function my_function($param1, $param2)
{
// do something great
}
try
{
my_function('only_one_param');
}
catch (AppException $exception)
{
}
, что приводит к запутыванию ошибок и дизайну интерфейса приложения.
Что вы думаете об обработке ошибок таким образом?Стоит ли превращать нативные ошибки PHP в исключения?Что вы делаете в ситуациях, подобных описанным выше, когда кодовая база разработана вокруг этой идеи?