3

独自のデータベースの API に接続するための非常に古いクラスを含むアプリがあります。このコードは、多数の非推奨エラーを生成してログに記録し、ログ ファイルを汚染します。

このベンダー提供のクラスについてのみ非推奨エラーを本質的に無視したいのですが、これを行う最善の方法を見つけるのに苦労しています。私が見たオプション:

を使用して警告を抑制します@これはincludesでは機能せず、値を返す関数でのみ機能するようです。

インクルードを含むラッパー スクリプトを作成し、インクルード ステートメントの前の警告をオフにします。ini_setグローバルに動作し、非推奨の警告をすべてオフにするため、これは実行可能な解決策ではありません。

ベンダー提供のスクリプトを更新します。これらのエラーに完全には対処していないが、たとえば新しい機能を追加する新しいバージョンが到着した場合、余分な作業とメンテナンスが発生するため、この道をたどりたくありません。

この 1 つの特定のベンダー ライブラリで、不足している警告を無効にする他のオプションはありますか?

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 に答える