日記
set_error_handlerと@エラー抑止との関係 (22:01)Edit

マニュアルを良く読めば書いてあったのだけど、気づかずしばらくはまっていたので、覚え書き。

set_error_handlerを使って独自のエラーハンドリングをする場合、@でエラー抑止している部分からも指定したエラーハンドラが呼ばれる。その場合、errer_reporting()でカレントのエラーレベルを取得し、それが0だった場合は、@でエラー抑止している部分からの呼び出しだということで、returnしてしまえばいい。

error_reporting(E_ALL);
set_error_handler('myhandler');
echo @$undefined; // このエラーは無視して欲しい
echo $undefined;
function myhandler($errno, $errstr, $errfile, $errline)
{
if (error_reporting() == 0) {return;} // ←ここがポイント
echo "$errno, $errstr, $errfile, $errline\n";
die;
}

なんて感じ。

Published At2005-08-02 00:00Updated At2005-08-02 00:00