Vì vậy, để nắm bắt những gì Westie đang nói, phần quan trọng là bạn chỉ có thể có một trình xử lý lỗi và hàm set_error_handler() trả về trình xử lý lỗi đã xác định trước đó hoặc null nếu không được xác định. Vì vậy, trong trình xử lý lỗi của bạn, có thể sử dụng một lớp lưu trữ trình xử lý lỗi trước đó khi đăng ký nó, để khi bạn xử lý các lỗi với phương thức lớp của mình, hãy gọi trình xử lý lỗi trước đó. Một đoạn trích từ các khách hàng quạ-php Sentry:
public function registerErrorHandler($call_existing_error_handler = true, $error_types = -1)
{
$this->error_types = $error_types;
$this->old_error_handler = set_error_handler(array($this, 'handleError'), error_reporting());
$this->call_existing_error_handler = $call_existing_error_handler;
}
và sau đó là phương pháp xử lý lỗi:
public function handleError($code, $message, $file = '', $line = 0, $context=array())
{
if ($this->error_types & $code & error_reporting()) {
$e = new ErrorException($message, 0, $code, $file, $line);
$this->handleException($e, true, $context);
}
if ($this->call_existing_error_handler && $this->old_error_handler) {
call_user_func($this->old_error_handler, $code, $message, $file, $line, $context);
}
}
Xin lưu ý rằng điều này giả định> = PHP 5.4 – thorne51