PHP では @ を付けることでエラーを回避できるという便利な記述方法があり、ものぐさな私などは
if (@$var["foo"]) $result = $var["foo"];
みたいなコードを書いてしまいます。
で、この処理が「遅い」という噂やツッコミを度々受けるので調べてみました。
「ほら、そんな気にするほどでも無いよ」という結果を期待していたのですが、、、なんじゃこりゃ。。。
劇遅じゃないですか、これ。
いやはや・・・
ちょっと列挙しますね。以下のようなコードを単純 for 文で 100万回実行したときの結果です。
error_reporting(0) で PHP4
if (@$a["hoge"]) $b = $a["hoge"];⇒ 約 2.4 秒
if ($a["hoge"]) $b = $a["hoge"];⇒ 約 1.3 秒
if (isset($a["hoge"])) $b = $a["hoge"];⇒ 約 0.57 秒
※いずれの場合も、$a = array("a" => "b") であり、if 文は必ず false になります
error_reporting(0xffff) で PHP4
if (@$a["hoge"]) $b = $a["hoge"];⇒ 約 2.4 秒
if (isset($a["hoge"])) $b = $a["hoge"];⇒ 約 0.57 秒
error_reporting(0) で PHP5
if (@$a["hoge"]) $b = $a["hoge"];⇒ 約 4.8 秒
if ($a["hoge"]) $b = $a["hoge"];⇒ 約 4.2 秒
if (isset($a["hoge"])) $b = $a["hoge"];⇒ 約 0.90 秒
error_reporting(0xffff) で PHP5
if (@$a["hoge"]) $b = $a["hoge"];⇒約 9.6 秒
if (isset($a["hoge"])) $b = $a["hoge"];⇒ 約 0.92 秒
※PHP5 のマシンは Dual Core Xeon と高スペックだったので 1000万回の実行時間です。
・・・遅い・・・遅すぎる・・・ここまでパフォーマンス悪くなるとは・・・
細かい処理とはいえ、最大10倍違うわけですから・・・
すいません、完全なる私の敗北です。これからはちゃんと isset() とか死ぬほど使います (_o_)