1

我正在使用我们添加了自定义错误处理程序的应用程序。我们添加它的原因是为了让我们可以立即收到通知并跟踪应用程序中的问题。

这里的问题是,在调试模式下,我已切换错误处理程序以打印出所有错误。这里的目标是消除所有发生的错误。

现在,我正在尝试从可能会或可能不会被序列化的数据库中提取变量。所以,我目前知道的检测它们是否被序列化的唯一方法是添加一个测试。(即if (unserialize($var)) { // do it })。

我可以将静音运算符添加到函数调用中,但自定义错误处理程序会忽略它。有没有办法检测给定的错误是否被静音?还是有更好的方法来做到这一点?

我无法修改数据库结构或数据。

4

1 回答 1

5

我可以将静音运算符添加到函数调用中,但自定义错误处理程序会忽略它。

实际上,在这种情况下,“静音”运算符可以正常工作。通过检查自定义错误处理程序中的错误报告设置,您可以遵循使用@抑制运算符的个别情况:

set_error_handler(function($errNo, $errStr, $errFile, $errLine) {
    if (0 !== error_reporting()) {
        $msg = "$errStr in $errFile on line $errLine";
        throw new ErrorException($msg, $errNo);
    }
});

如果error_reporting() === 0然后使用@抑制运算符。只要您在开始其他处理程序之前检查该值,您就可以了。

于 2013-01-07T21:36:53.160 回答