Установить и восстановить обработчик ошибок
Одна из возможностей - установить собственный обработчик ошибок перед вызовом и позже восстановить предыдущий обработчик ошибок с помощью restore_error_handler()
.
set_error_handler(function() { /* ignore errors */ });
dns_get_record();
restore_error_handler();
Вы могли бы развить эту идею и написать повторно используемый обработчик ошибок, который регистрирует ошибки для вас.
set_error_handler([$logger, 'onSilencedError']);
dns_get_record();
restore_error_handler();
Превращение ошибок в исключения
Вы можете использовать set_error_handler()
и класс ErrorException
, чтобы превратить все ошибки php в исключения.
set_error_handler(function($errno, $errstr, $errfile, $errline, array $errcontext) {
// error was suppressed with the @-operator
if (0 === error_reporting()) {
return false;
}
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
});
try {
dns_get_record();
} catch (ErrorException $e) {
// ...
}
При использовании собственного обработчика ошибок важно отметить, что он обойдёт настройку error_reporting
и передаст все ошибки (уведомления, предупреждения и т. Д.) Вашему обработчику ошибок. Вы можете установить второй аргумент в set_error_handler()
, чтобы определить, какие типы ошибок вы хотите получать, или получить доступ к текущим настройкам, используя ... = error_reporting()
в обработчике ошибок.
Подавление предупреждения
Другая возможность - отменить вызов с помощью оператора @ и впоследствии проверить возвращаемое значение dns_get_record()
. Но я бы посоветовал против этого , поскольку ошибки / предупреждения инициируются для обработки, а не для подавления.