php - 如何设置set_error_handler使其仅在类的实例中生效而不在全局中生效?

标签 php oop error-handling

考虑以下代码:

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

关于php - 如何设置set_error_handler使其仅在类的实例中生效而不在全局中生效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7965644/

相关文章:

loops - SAS-自动拆分库中的所有数据集时出错

php - 重写规则重定向文件夹

php - 通过 AJAX jquery 更改表格背景颜色?

oop - Matlab 面向对象的组合、聚合

c++ - 制作 GUI 时清理 OOP 设计

python - 当信号处理程序中遇到异常时,如何使 Django 信号处理程序不会静默失败?

php - 在 PHP 中的二进制文件中搜索字节序列?

php - Laravel 5 LEFT JOIN 的 id 问题

java - 如何处理同一域模型的多个 'views'?

php - 自升级为山狮以来,PHP错误处理已消失