• ベストアンサー

条件演算子

<?php $param = isset( $argv[1] ? $argv[1] : 'default'; と(And) !  <?php if (isset( $argv[1])) {    $param = $argv[1]; } else { $param = 'default'; } 以上2件のプログラは全く同じロジックだそうです。  皆様はどちらを使いますか!?     よろしくお願いします。  

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

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

> $param = isset( $argv[1] ? $argv[1] : 'default'; isset の括弧が閉じていない! ……というツッコミは置いといて、自分ならどちらも使います。 どちらを使うかは、 ・条件演算子を使っての記述が 1 行 80 文字以内になる ・使う条件演算子が 1 つのみ ・条件文が関数呼び出しのみか比較演算が 1 つのみ をすべて満たす場合に条件演算子の方を使います。 なぜならば、条件演算子を使った上記のいずれかを満たさない記述は途端に読みにくくなるからです。 (例) $param1 = isset($argv[1]) ? "Yes, this parameter is set. No probrem!" : "On no! this parameter is not set. This is great probrem!!!"; $param2 = isset($argv[1]) ? (isset($argv[2]) ? 2 : 1) : (isset($argv[2]) ? 1 : 0); $param3 = ($a < 2) && ($b !== 3) ? "good!" : "oops!"; まあ、自分のホームグラウンドは C++ なので、PHP の場合の流儀とは違うかもしれませんが。

Campus2
質問者

お礼

ご回答誠にありがとうございました。  参考になります。 最初うちは、文字は多くなりますが、if文が分かりやすいみたいですね!  myいわく!心配無用にならないようスキルupが肝要ですが^^    

その他の回答 (3)

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.4

総論として、処理が単純でかつ永続的に処理内容が変わらなさそうな場合には三項演算子を使います。 ご提示の例は引数のチェックをしているのですよね。引数のチェックの場合、 ・項目が存在しない場合 ・項目は存在するが空文字で送信された場合 を区別して処理したり、エラーメッセージのセットをそこで行ったりと、処理の内容が変わる可能性が高いといえます。 将来変更の可能性が高いので、このようなケースでは私はif文を使います。

Campus2
質問者

お礼

ご回答誠にありがとうございました。  IFがいいみたいですね! 現在の私のスキル!では、まだまだ心配無用なので、基本のC言語からです。  以上の懸念が役に立つ日を夢見て日々努力します。

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

提示された例であれば、間違いなく三項演算子で書きます。 使わないケースとしては、基本的にはマニュアルのとおり「積み重ねて」使うことはないです。 RTFM http://www.php.net//manual/ja/language.operators.comparison.php if の入れ子の方が直感的にわかりやすいです。三項演算子の「積み重ね」は書くときはいいけど、あとで他人(一週間後の自分は他人です)が読むときにすらすらとは読めないので。 あと記述が長くなって ? や : の位置がわかりにくいケースでは多少の工夫はしますね。

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

所定の条件で特定の変数に別々の値を代入するのであれば そのための処理が三項演算子なので(1)を使うのが妥当でしょう もしここで三項演算子を使わないのであれば、ほかで使うところはありません。 ifでの条件分岐は、複数の代入や実行ができるので、$paramに値を入れるだけが 目的であればプライオリティは低いでしょう ちなみに$paramの初期化を考えるのであれば $param = 'default'; を先に宣言しておき 条件分岐の際 if(isset( $argv[1])) $param = $argv[1]; とするのでもよいでしょう

Campus2
質問者

お礼

ご回答誠にありがとうございました。  参考になります。  現在の私はスキルでは、まだまだですが、スキルup!中です。

関連するQ&A