Definir e restaurar manipulador de erros
Uma possibilidade é definir seu próprio manipulador de erros antes da chamada e restaurar o manipulador de erros anterior posteriormente com restore_error_handler()
.
set_error_handler(function() { /* ignore errors */ });
dns_get_record();
restore_error_handler();
Você pode desenvolver essa ideia e escrever um manipulador de erros reutilizável que registre os erros para você.
set_error_handler([$logger, 'onSilencedError']);
dns_get_record();
restore_error_handler();
Transformando erros em exceções
Você pode usar set_error_handler()
e a ErrorException
classe para transformar todos os erros de php em exceções.
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) {
// ...
}
O importante a ser observado ao usar seu próprio manipulador de erros é que ele ignorará a error_reporting
configuração e passará todos os erros (avisos, avisos etc.) para o manipulador de erros. Você pode definir um segundo argumento set_error_handler()
para definir quais tipos de erro deseja receber ou acessar a configuração atual usando ... = error_reporting()
dentro do manipulador de erros.
Suprimindo o aviso
Outra possibilidade é suprimir a chamada com o operador @ e verificar o valor de retorno dns_get_record()
posteriormente. Mas eu aconselho isso, pois os erros / avisos são acionados para serem manipulados, não para serem suprimidos.