• ベストアンサー

@$a = $b["c"] or $a = "text"; という記述の仕方

これは $a = b["c"] がエラーだったら$aに"text"を代入できるので楽なんですが、 あまり使わない方がいい構文なのでしょうか? 配列の存在チェックをしていて if(isset($b["c"])){ $a = $b["c"]; }else{ $a = "text"; } こちらの方がいいのでしょうか? or の使い方が検索してもイマイチ分からないのです @はエラーが発生しているのに、それを表示しない方法だと認識しています だからエラーを出さないのが正しい記述なのであれば、後者が正しいのかと思ったり 1行で収まる上に、一応構文として理解も難しくないので問題ないのかなと思ったり タイトルの記述方法が不適切なのかどうかと、orの適切な使い方、@はあまり使わない方がいいのかを教えてください 本やネットで検索してみたのですが、どうしてもヒットしません 検索で分かるのでしたら、どのような検索の仕方がいいか教えてください! お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

@$a = $b["c"] or $a = "text"; と if(isset($b["c"])){ $a = $b["c"]; }else{ $a = "text"; } では$b["c"] = 0の時の動作が違いますね 上の式と同じにするなら if(isset($b["c"]) and $b["c"]){ または if(!empty($b["c"])){ になると思います @は自分も関数の頭に使うことはたまにあります。使わない方がいいとは思いません。 @がないと$b["c"]が未定義の場合にNoticeエラーとなります。

noname#14955
質問者

お礼

回答ありがとうございます^^ 最悪$aに""が入ればいいのです!null値以外ならいいという事に使いたいので >if(isset($b["c"]) and $b["c"]){ を早速試して色々やってみたいと思います! @がないと配列で値が持ってこれてない場合に、仰るとおりエラーになるんですよね^^; @を使えば1行で簡潔な構文になるので、使っていいなら使おうかなぁと思ったんです

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

#1です。 ごめんなさい。不勉強でした。 php.iniで「error_reporting = E_ALL」と しているとNOTICEエラーになるんですね。 普通にインストールしている限り 「error_reporting = E_ALL & ~E_NOTICE」だと 思っていました。 バージョンによってセキュリティポリシーが違うの ですかね?(私はPHP4.3ですが・・・) とりあえず、@を使ったらタイプミスしないよう 気をつければなんとかなるかもしれませんね。 あとは不明な値を配列に投げないようにフローを 調整するとかしかないすかねぇ・・・。

noname#14955
質問者

お礼

いえいえとんでもないです! とりあえずNOTICEエラーが出るので、長々エラー処理するか 簡単に済ますかで悩んでたんです^^; ありがとうございました^^

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

エラーを前提としたプログラムの作成はあまり 良い結果を生まない場合もおおいようです。 またエラーをdieで止めていない場合、つづり 間違いなどがあってもスルーしてしまう懸念も あります。 最初から懸念があるのであればエラーチェック 用関数をご利用なさることをお勧めします。 例示いただいた配列を変数へ代入する場合は、 基本的には@をつけなくても明示的なエラーには なりません。(宣言されてない配列も代入できます) issetを使う必要もないかもしれません。 経験的に配列の場合はis_arrayはよく使います。 foreachなどで廻すときに配列指定がないとエラーが はっきりでますので。 また「@」は「エラー制御演算子」といいます。 「PHP エラー制御演算子」というキーワードで 検索するといろいろヒットします。 解説は以下をまずご一読なさるとよろしいでしょう。

参考URL:
http://www.php.net/manual/ja/language.operators.errorcontrol.php
noname#14955
質問者

お礼

回答ありがとうございます^^ エラーを前提と言いますか、配列がなければ新たに値をセットするという行為をしたいんです それで発見したのが@をつけた方法だったので… ですからそのままエラーが延びていく場合には使いません ただ50%の確率でエラーが出るので、エラーチェック用関数を使った方がいいみたいですね

関連するQ&A