• ベストアンサー

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

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

noname#14955
noname#14955
  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • 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

  • a+b+c=2で、a>0,b>0,C>0

    a+b+c=2で、a>0,b>0,C>0 のときに、a^3+b^3+c^3の最小値を出せ という問題ってどうやってときますか? 僕が考えたのが、c=2-(a+b)を代入して、aとbそれぞれで平方完成を考えたのですが、式が複雑になります。スマートに解く方法てあるのですか?

  • Either A of B or C の 構文

    I.Both of B and CとEither of B or Cの構文 Both of B and C の構文はグランドセンチュリー和英辞典ではNGと書かれていますので、Either of B or Cの構文もNGと考えています。 Either of B or Cの構文をNetで調べると下記をみつけましたが、B or C は( )内で記載されています。 The one-day pass should admit the Rotarians and their guests for either of the two days (Monday or Tuesday), but not both days. ロータリアンとゲストはこの1日パスを(月曜日か火曜日の)いずれかの日に使用すること ができるが、両日に使用することはできない。 引用元: 両日-英語翻訳-Linguee辞書 次にEither A of B or C とBoth A of B and C の構文ですが、Netで調べても構文説明がされている文法サイトを見つけることができなかったので、I項と同様に文法的にはNGだろうと思っているのですが、気になって本サイトに質問を掲載しました。 II.Either A of B or C の構文 Either day of B or C をNetで調べると B or C は1項の( )内と同様に分離されています。 (1)You can come on either day. Saturday or Sunday. 土曜日か日曜日、どちでも来てもいいよ。 引用元: 研伸館ブログ:E-文826<第46回> 日本国内での検索例 (2)The subjects were given 100m1 of experimental drink containing either 20g of CBEX or no CBEX 30 - min before, immediately after, 1, 2, 3 and 4days after squat exercise. 引用元: 論文「遅発性筋肉痛および筋疲労感に対する鶏胸肉抽出物(CBEX)摂取の影響」 (3)In either case of earthquake or inferno, don't use an elevator to get out of the building. 地震または大火災のどちらの場合でも、建物から出るのにエレベーターを使わないでください。 引用元:他の質問サイトの作文例 III.Both A of B and C の構文 .eduでの検索例 (1)Both cases of a chemoattractant and a chemorepellent are discussed. 日本国内での検索例 (2)As a result, a transient increase was observed on March 15, a sustained rise was observed on both days of March 21 and 22. 引用元: 論文「東京都世田谷区における空間放射線量率について」 そこで質問です。 1.II(1)ではまどろっこしいので、You can come on either day of Saturday or Sunday.と単文で言いたくなります。これはやはり間違いなのでしょうか。 You can come on either Saturday or Sunday.だと文法的にOKということはわかるのですが、II(2)、(3)の例をみれば正しい文のようにも思えます。 Either A of B or C の構文は正しいのでしょうか、それとも間違いなのでしょうか。 2.Both A of B and C の構文はIIIの例文から正しいように思えるのですが、どうでしょうか。 宜しくお願い致します。

  • A>BでAがBの倍数でなくてA=C、C<Bになるま

    A>BでAがBの倍数でなくてA=C、C<BになるまでCにC-Bを代入する時、C = A-B(A/B) になることの証明が分からないんですけどどなたかご教示願います

  • a,b,cは自然数で、a^2+b^2+c^2=abc (a<=b<=c

    a,b,cは自然数で、a^2+b^2+c^2=abc (a<=b<=c)を満たす組(a,b,c)を求めよ。 代入して(3,3,3)は見つかったけれど、筋道たててもとめるにはどうしたらいいのでしようか。

  • エクセル/式 =OR(A1="A",A1="B",A1="C")について

    A1セルの値がA、B、Cのいずれかであるか否かの判定式は =OR(A1="A",A1="B",A1="C") だと思います。 しかし、いちいちA1=と書くのが面倒なので、 =OR(A1={"A","B","C"}) としてみたら案の定正しく判定されません。たぶんA1が単独の値で、{ }内が配列だからだと思いますが、その理解であっていますか? 次に、 =OR(A1:A1={"A","B","C"}) としたら今度は正しく判定するようですが、この式は=OR(A1="A",A1="B",A1="C")と同じ判定として正しいですか? 正しいとしたら、A1:A1と同じセル指定なのにこれを配列とみなしているのでしょうか?

  • A,B,C----

    英語から韓国語に訳すとき、 A、B、C、and Dは、A、B、C、및 D A、B、C、or Dは、A、B、C、또는 D でいいのでしょうか? また、お父さんとお母さんどっちが好き?という時、 아버지 이나 어머니, 어느 쪽 좋아하세요? でいいのでしょうか? A or Bはどのように表現すればよいのでしょうか?

  • A, B, C or D?

    A, B, C and Dという英語での表現の仕方がありますが、同じようにA, B, C or Dという表現は正しかったでしょうか?度忘れしてしまいました。よろしくお願いいたします。 

  • implodeで('a','b','c')したい

    タイトルの日本語がおかしいですが。。。。 よろしくお願いいたします。  下記環境です。 PHP Version 5.1.6 mysql 5.0.45 配列で受け取ったものを、 $address= implode(",",$address_aray); これで、  $address = a,b,c となります しかし以下の様に検索をかけるので "select ****** `address` in ('a','b','c') "; (a,b,c) では無く   ('a','b','c') クオンテーションで囲むには、どうしたらいいでしょうか? それとも、全く間抜けなやり方をしているでしょうか? ※カラムは [varchar] にしています。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • a×b=c でキレイなcになるaとbの求め方

    宜しくお願いします。 例えば、 932,640×18,750=17,487,000,000 453,120×96,875=43,896,000,000 のように、a×b=c でcの下の位が、希望の桁だけゼロになるような、 aとbを求める方法をさがしております。 最も単純なのは、乱数を使ってひたすら掛けてみる方法だと思いますが、 もっとかしこくて効率的なアルゴリズムはないでしょうか?

  • one of A, B, or Cという表現は正しいでしょうか。

    ●「one of + 複数名詞」というのが文法書の教えるところです。これからすると、「one of A. B, and C」は文法的に許容できそうな表現だと思います。 ●しかし「~のうちの一つ」というのがone ofの趣旨だとすれば、「AまたはBまたはCのどれか一つ」になる訳ですから、「A, B, or C」も許容できそうに思うのですが、どう考えたらよいのでしょうか。アドバイスお願いします。 ●もしどちらも(A, B, and CもA, B, or Cも)文法的に容認できるのであれば、そのニュアンスの違いなどもご教示いただければ幸いです。

専門家に質問してみよう