Ustaw i przywróć moduł obsługi błędów
Jedną z możliwości jest ustawienie własnego modułu obsługi błędów przed wywołaniem i przywrócenie poprzedniego modułu obsługi błędów za pomocą restore_error_handler()
.
set_error_handler(function() { /* ignore errors */ });
dns_get_record();
restore_error_handler();
Możesz skorzystać z tego pomysłu i napisać program obsługi błędów wielokrotnego użytku, który rejestruje błędy.
set_error_handler([$logger, 'onSilencedError']);
dns_get_record();
restore_error_handler();
Przekształcanie błędów w wyjątki
Możesz użyć set_error_handler()
i ErrorException
klasy, aby zamienić wszystkie błędy php w wyjątki.
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) {
// ...
}
Ważną rzeczą, na którą należy zwrócić uwagę podczas korzystania z własnego modułu obsługi błędów, jest to, że pominie ono error_reporting
ustawienie i przekaże wszystkie błędy (powiadomienia, ostrzeżenia itp.) Do modułu obsługi błędów. Możesz ustawić drugi argument, set_error_handler()
aby zdefiniować typy błędów, które chcesz otrzymać, lub uzyskać dostęp do bieżącego ustawienia za pomocą ... = error_reporting()
procedury obsługi błędów.
Tłumienie ostrzeżenia
Inną możliwością jest pomijanie połączenia z operatorem @ i sprawdzanie dns_get_record()
późniejszej wartości zwrotu . Ale odradzałbym to, ponieważ błędy / ostrzeżenia są wywoływane w celu obsługi, a nie tłumienia.