Встановити та відновити оброблювач помилок
Одна з можливостей - встановити власний обробник помилок перед викликом та відновити попередній обробник помилок пізніше 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, $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()
після цього. Але я б радив цього не робити, оскільки помилки / застереження викликають поводження, а не їх придушення.