PHP プログラマが "@" を使うべきでない 5 つの理由みて思ったこと
終的に$qに入るものが同じであることと、コードとして同じ意味であるかは、別じゃないでしょうか。
以上の話は僕ももってないんだけど、僕が使わない理由とその線引きについて、ちょこっとだけ書いてみます。(元の本とは関係ない話です)
プログラム初心者の方が悩んでいたりしてコードを教えたりする時に「とりあえず日本語に直して説明できる?」みたいな質問をすることってあるじゃないですか。あの感覚って重要で、コードを書いていて大きくなった関数など分ける時は日本語に直して(いや英語でも別言語でもいいけど)考えたりするわけです。
なにいってるかわからないかもしれないですけどまぁ日本語に直しましょう。
えーっとぱっと見のレベルです。
$q = isset($_GET['q']) ? $_GET['q'] : NULL;
の場合は、
- $_GET['q']が存在したら$qには$_GET['q']が入る
- $_GET['q']が存在しなかったらNULLを挿入する
となります。
$q = @$_GET['q'];
の場合は、僕は
- $_GET['q']がない場合noticeが発生するので@演算子にて抑制した
- $qに$_GET['q']がある場合は$_GET['q']の値が入る
- $_GET['q']がない場合はえーっと何が入るんだっけ?(ここらへんを調べる)
という状態になります。(もちろん何が入るか知らないのは知識が不足しているだけかもしれません)
元の本は僕は読んでいないのでPHPのドキュメントや内部のソースを読んだりすることで、問題がないとかんがえているもしくは、別の考えに基づいてるのかもしれませんので、元の本については言及控えさせていただきますが、僕が@演算子をこの場合において可能な限りつかわないのはそういう理由です。
@を全体で使うか使わないかは別件で、仕方がない所以外は使わないのが乙女・・・じゃなくて僕のポリシー
で、関数にくくりだす話。
$_GET['q']が存在したら$qには$_GET['q']が入る
$_GET['q']が存在しなかったらNULLを挿入する
まで話ができていればほぼほぼ仕様ができあがってる気がしません?
基本的にフレームワーク上ではRequestクラス的なものがあって$_GETつかうことはほとんどないのであんまり使いませんけそこらへんを関数に追い出して中身は@だろうがなんだろうが関数としてのインターフェースさえ気をつけていればいい状態にするってのも結構大切ですよね。(最初、サンプルコードかいたけどちょっといけてないので消しました)
プログラマにいってもしょうがない話だけど美学的に忙しいと時々忘れるのでつぶやいてみます。