エラー制御

今日のハマりどころ。


フレームワークのエラー制御と標準のエラーハンドラを統合するところで気が付きにくいポイントがあった。
set_error_handler()でユーザ指定の関数を登録すると、@(エラー制御演算子)がついてる場合でもエラーが表示されてしまう。

標準のエラーハンドラはerror_reporting()で判断しているので、同じような動作をさせるためには

function output(){
    if (error_reporting() === 0)
        return;
    
    ....// エラー出力処理
}

のようにerror_reportingの値を見て判断する。
@がついている場合はerror_reportingがゼロに設定される。
要するに@付き関数の処理の間だけerror_reportingがゼロに設定され、それを抜けると元のerror_reportingの値に戻るらしい。