3

我们有一个应用程序,其中包含一个非常古老的类来连接到专有数据库的 API。此代码会生成大量弃用错误,然后会被记录下来,从而污染我们的日志文件。

我们只想忽略这个供应商提供的类的弃用错误,但我很难找到最好的方法来做到这一点。我见过的选项:

使用 抑制警告@看起来这不适用于包含,仅适用于返回值的函数。

创建包含包含的包装脚本,并关闭包含语句之前的警告。作为ini_set全球行动,关闭所有弃用警告,这不是一个可行的解决方案。

更新供应商提供的脚本。我们宁愿不走这条路,因为如果新版本到来时需要额外的工作和维护,但它不能完全解决这些错误,但会增加新的功能,例如。

在我缺少的这个特定供应商库中禁用警告的任何其他选项?

4

1 回答 1

2

您可以附加一个用户错误处理程序,以便在 PHP 看到它之前吃掉错误。只有当错误是在有罪库的源代码中生成时,此处理程序才会进行干预。例如:

class SingleSourceFileErrorSuppressor
{
    private $_file;

    public function __construct($file)
    {
        $this->_file = $file;
    }

    public function handleError($errno, $message, $file)
    {
        if ($file !== $this->file) return false;
    }
}

你会像这样使用这个类:

$naughtyLibrary = realpath('naughty.class.php');
$suppressor = new SingleSourceFileErrorSuppressor($naughtyLibrary);
set_error_handler([$suppressor, 'handleError'], E_DEPRECATED);
require($naughtyLibrary);

更新:我认为即使是微不足道的修改,修改供应商的库源也不是最好的主意,因为您必须记住维护它们,因此更改了建议的安装过程。新程序有一个不同的缺点:它不会自动搜索include_path. 原始建议可通过答案的编辑历史记录获得。选择你的毒药。

于 2013-11-08T23:31:45.473 回答