如何设置error_handler,使其仅在类的实例中生效,而不是全局生效


how to set_error_handler so it can take effect only in an instance of a class and not globally?

考虑以下代码:

class TestClass {
  function __construct() {
    set_error_handler(array($this,'error_handler'));
  }
  function error_handler($errno,$errstr,$errfile,$errline,$errcontext) {
    trigger_error("'ncode: [$errno]'nfile: [$errfile -> $errline]'nSTR: [$errstr]",E_USER_ERROR);
  }
}
count($nonExistentVariable);
//notice was thrown above but script carry on
//but here error handler is registered and...
$anInstance = new TestClass();
// rest of the code is affected by it
count($nonExistentVariable); // user error is thrown

那么是否有一种方法可以使error_handler函数仅在实例内部遇到错误时才触发,并且不会与其他代码全局混淆?

您可以检查错误处理程序中的调用堆栈(通过debug_backtrace()),并确定它是否来自您感兴趣的类。如果它不是来自类,确保return FALSE和PHP将返回到它的默认处理程序。

http://php.net/manual/en/function.set-error-handler.php