エラー抑制演算子を使わざるを得ないとき

PHP プログラマが "@" を使うべきでない 5 つの理由 - 肉とご飯と甘いもの @ sotarok
http://d.hatena.ne.jp/sotarok/20090721/1248112106

PHPでエラー抑制演算子@を正当に使ってるなぁと思ったケース - それ図解で。・・・tohokuaikiのチラシの裏
http://d.hatena.ne.jp/tohokuaiki/20090721/1248145745

と、話題になってるようなので、既に出遅れた感があるけど自分も便乗して。


今までずっと@なんか使わずにコードを書いてきたけど、先日ついに使ってしまった。fopenで。


fopen - ファイルまたは URL をオープンする

(超略しまくり)


エラー / 例外

オープンが失敗するとこの関数は FALSE を返し、 E_WARNING レベルのエラーを発行します。 @ を使ってこの warning を抑制することもできます。

とまあこんな感じで、黙ってFALSEだけ返してりゃいいものを、PHPは問答無用でWarningを吐きやがる。
他にもこういう関数が時々あるのでそういう場合は仕方なく使うしかないんじゃないかなぁと思う。


display_errorsはOffにするとしても、error_reportingからE_WARNING外すなんて考えられないし、
file_existsやis_readableでチェックしたところでアトミックには処理できないし、
自前のエラーハンドラを設定してそれっぽいやつだけ無視するとかナンセンスだし。


ちなみにparse_urlもparse不能な場合はE_WARNINGを発するらしいんだけど、変な記号とかバイナリ値とか突っ込んでもpathになるだけでE_WARNING出なかった……。