Set và khôi phục xử lý lỗi
Một khả năng là để thiết lập xử lý lỗi của riêng bạn trước khi cuộc gọi và khôi phục xử lý lỗi trước sau với restore_error_handler()
.
set_error_handler(function() { /* ignore errors */ });
dns_get_record();
restore_error_handler();
Bạn có thể xây dựng dựa trên ý tưởng này và viết trình xử lý lỗi có thể sử dụng lại để ghi lại lỗi cho bạn.
set_error_handler([$logger, 'onSilencedError']);
dns_get_record();
restore_error_handler();
Quay lỗi vào trường hợp ngoại lệ
Bạn có thể sử dụng set_error_handler()
và lớp ErrorException
để biến tất cả các lỗi php vào trường hợp ngoại lệ.
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) {
// ...
}
Điều quan trọng cần lưu ý khi sử dụng xử lý lỗi của riêng bạn là nó sẽ bỏ qua các thiết lập error_reporting
và vượt qua tất cả các lỗi (thông báo, cảnh báo, vv) để xử lý lỗi của bạn. Bạn có thể đặt đối số thứ hai trên set_error_handler()
để xác định loại lỗi nào bạn muốn nhận hoặc truy cập cài đặt hiện tại bằng cách sử dụng ... = error_reporting()
bên trong trình xử lý lỗi.
cấm mức cảnh báo
Một khả năng khác là để ngăn chặn các cuộc gọi với các nhà điều hành @ và kiểm tra giá trị trở lại của dns_get_record()
sau đó. Nhưng tôi khuyên bạn nên chống lại điều này là lỗi/cảnh báo được kích hoạt để được xử lý, không bị đàn áp.
Nguồn
2009-08-06 21:55:39
http://stackoverflow.com/questions/136899/suppress-error-with-operator-in-php là một cuộc thảo luận tốt về những thứ như thế này. – Mez
có câu trả lời bên dưới đã bị xóa? hoặc bởi chủ sở hữu hoặc bởi ai đó? – user121196
cũng xem: http://stackoverflow.com/questions/1087365 – dreftymac