Imposta e ripristina il gestore errori
Una possibilità è impostare il proprio gestore degli errori prima della chiamata e ripristinare il precedente gestore degli errori con restore_error_handler()
.
set_error_handler(function() { /* ignore errors */ });
dns_get_record();
restore_error_handler();
Potresti basarti su questa idea e scrivere un gestore di errori riutilizzabile che registra gli errori per te.
set_error_handler([$logger, 'onSilencedError']);
dns_get_record();
restore_error_handler();
Trasformare gli errori in eccezioni
Puoi usare set_error_handler()
e la ErrorException
classe per trasformare tutti gli errori php in eccezioni.
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) {
// ...
}
La cosa importante da notare quando si utilizza il proprio gestore degli errori è che ignorerà l' error_reporting
impostazione e passerà tutti gli errori (avvisi, avvertenze, ecc.) Al proprio gestore degli errori. È possibile impostare un secondo argomento set_error_handler()
per definire quali tipi di errore si desidera ricevere o accedere all'impostazione corrente utilizzando ... = error_reporting()
all'interno del gestore errori.
Sopprimendo l'avvertimento
Un'altra possibilità è quella di sopprimere la chiamata con l'operatore @ e verificare il valore di ritorno di dns_get_record()
successivamente. Ma sconsiglio questo perché gli errori / avvertimenti vengono attivati per essere gestiti, non per essere soppressi.