Vấn đề:
Tôi cần bắt giữ một số warning được đưa ra từ một số hàm gốc của php và sau đó xử lý chúng. try / catch không hoạt động vì warning không phải là exception. Bạn có thể giúp biến error thành exception trong PHP không?
Giải pháp:
Bạn có thể sử dụng set_error_handler() và lớp ErrorException để biến tất cả các php error thành exception.
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) {
// ...
}
Điều quan trọng cần lưu ý khi sử dụng trình xử lý error của riêng bạn là nó sẽ bỏ qua cài đặt error_reporting và chuyển tất cả các error (notice, warning, v.v.) cho trình xử lý error của bạn. Bạn có thể đặt đối số thứ hai trên set_error_handler() để xác định loại error 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ý error.