• ベストアンサー

条件演算子

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

  • PHP
  • 回答数4
  • ありがとう数3

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

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

  • よくわからなかったので試してみました。

    <?php if (isset($default)){ $param = $argv[1]; } else{ $param = 'default'; } ?> --------------------------------------------- <?php if (isset($argv[1])){ $param = $argv[1]; } else{ $param = 'default'; } <? ------------------------------------------- 以上実行結果は同じですが、プログラムを組む場合とくどちらを選択しても  宜しいのでしょうか!? 以上よろしくお願いします。

    • ベストアンサー
    • PHP
  •  三項演算子で違いが判らない

     三項演算子で 変数「$data」>=10 の場合”10以上”、それ以外なら”10以下”と表示する。 <?php $data = 15; $str = ($data >= 10)?"10以上":"10以下"; print $str; ?>  以上は理解できます。  しかし以下はほとんど理解できません!? <?php if (isset($argv[1])){ $param = $argv[1]; } else {     $param = 'default'; } 二つは同じ三項演算子で同類ということですが、  アバウトな質問のような気がしますが、違いを教えていただけますか!  よろしくお願いします。

    • ベストアンサー
    • PHP
  •  %php stringcast.php 100

    <?php // stringcast.php if (!isset($argv[1])) { exit; } $num = $argv[1]; if ($num == 100) { echo "num is 100", PHP_EOL; } else { echo "num is not 100",PHP_EOL; } このプログラムを %php stringcast.php 100のように実行すると、引数の100は PHPには文字列型として渡されます。・・・  以上参考書にあります。  作業の流れが分かりません。  %php stringcast.php 100とは!何のことなのでしょうか!?  以上宜しくお願いします。

    • ベストアンサー
    • PHP
  • どうしたら確認ができますか!?

    以下参考書をそまま入力しました。 ] ---------------------------------------------------  論理積と論理和では、2通りの表記方法がありますが、これは演算子の優先順位(注6)が違います。 (注意6)優先順位については3.2.3(P80)を参照 <?php $flag and foo(); if(isset($argv[1] && $argv[1] { echo '与えられた引数は真です',PHP_EOL; } else{ echo '引数が与えられていないか、与えられた引数が真ではありません' ,PHP_EOL; }  この列では、引数が与えられているかをまずチェックし、与えられている場合はそれが真である かを調べます。論理演算子では、評価結果がわかった時点で演算結果を返します。これを短絡評価 といいます。短絡評価されるため、最初のisset($argv[1])が為である場合、次の$argv[1]の評価 は一切行われません(もし評価されてしまったならば、NOtic:Undefined offset:1となってしまい ます)。  たとえば、次の例では、$flagが為の場合では、関数foo()が呼ばれることはありません。 <?php $flag and foo();   ----------------------------------------------------------- 以上ですが、 これって、どうしたら確認ができますか!?   xamppは働いています。    HTMLで試しましたがParseエラーがでました。 <html> <head> <meta "charset=utf-8" /> <title>論理演算子</title> </head> <body> <?php if(isset($argv[1] && $argv[1] { echo '与えられた引数は真です',PHP_EOL; } else{ echo '引く数が与えられていないか、与えられた引数が真ではありません' ,PHP_EOL; } ?> </body> </html> 以上の実行結果は 以下です。 Parse error: syntax error, unexpected '&&' (T_BOOLEAN_AND), expecting ',' or ')' in C:\xampp\htdocs\study.localhost\php.php on line 10  以上です。    よろしくお願いします。  

    • ベストアンサー
    • PHP
  • $argv[1]) && $argv[1]・同じ

     以下のプログラムですが! <html> <head> <meta "charset=utf-8" /> <title>論理演算子</title> </head> <body> <?php if(isset($argv[1]) && $argv[1]) { echo '与えられた引数は真です',PHP_EOL; } else{ echo '引く数が与えられていないか、与えられた引数が真ではありません' ,PHP_EOL; } ?> </body> </html> 以上のプログラムの実行結果は以下となりました。    引く数が与えられていないか、与えられた引数が真ではありません 以上の実行結果は”真でありません”と出ています。    $argv[1]) && $argv[1]・・・&&は理論積の、両辺は同じなのでtrueならばtrueの真だから、  "与えられた引数は真です"と出るのではないんでしょうか!?  以上よろしくお願いします。

    • ベストアンサー
    • PHP
  • 二つの条件を一度に行うには?

    リファレンスブックなどで調べたのですが自力の解決には至らず質問させていただければと思います。 2つの条件をPHPで一度に行うにはどうしたらいいのでしょうか? 例えば if(isset($58)){ if($58 == "1"){ $a = "n"; }else{ $a = "y"; } echo $a; } な感じです。恥ずかしながらまったくの初心者で見てのとおり動いてはくれません。 この機能を実装するにはそのように書けばいいのでしょうか?

    • ベストアンサー
    • PHP
  • ストアドプロシージャの条件分岐に関して

    お世話になります。 以下の環境で開発を行っています。 言語:C#(.NET 2008) DB: SQL Server 2008 C#で作成した画面にて入力された値をパラメータで ストアドプロシージャに渡し、その値がNULLでない場合だけ WHERE句にレコード絞り込み条件を与えるSQL文を 考えているのですが、記述方法がわかりません。 (プロシージャ) --------------------------------------------- DECLARE @param1 = ''  -- 画面から渡されるパラメータ1 @param2 = ''   -- 画面から渡されるパラメータ2 SELECT * FROM TABLE1 A, TABLE2 B    -- (1) IF @param1 IS NOT NULL AND @param2 IS NOT NULL    -- ここから WHERE A.COLUMN1 = @param1 AND A.COLUMN2 = @param2 ELSE IF @param1 IS NOT NULL AND @param2 IS NULL WHERE A.COLUMN1 = @param1 ELSE IF @param1 IS NULL AND @param2 IS NOT NULL WHERE A.COLUMN2 = @param2              -- ここまで (2) AND A.COLUMN1 = B.COLUMN1       -- (3) AND A.COLUMN2 = B.COLUMN2      -- (4)   ------------------------------------------------ 上記の(1)から(4)までをうまく1つにまとめたかたちで記述することができません。 特に上記(2)の効率のよい正しい記述方法がわかりません。 どなたかご教授願えますか? よろしくお願いいたします。

  • = $argv[1];はどんな働きがありますか!?

    <?php // stringcast.php if (!isset($argv[1])) { exit; } $num = $argv[1]; if ($num == 100) {  ←(1) echo "num is 100", PHP_EOL; } else { echo "num is not 100",PHP_EOL; } このプログラムを %php stringcast.php100 のように実行する、引数の100はPHP文字列型として渡されます。  したがって、(1)の比較では、文字列"100"の入って変数$numと、整数100が比較されるため、 文字列"100"は整列100へとキャストされまた後、比較演算が実行されます。  今回は、動作の結果に違いはありませんが、ここで整数同士を比較しているつもりでも実際には 文字列を整数の比較が行われ、キャストが発生している、という挙動を把握しているか、していない かではなく大きな違いがあります。引数とし期待している値の型が決まっている場合、明示的にキャ ストを行い、厳密な比較演算子(===など)を用いるほうが安全です。 -------------------------------------------------------- 以上、参考書をまるごと入力しました。  そこで $num = $argv[1];で!$argv[1]とはこのプログラムではどんな働きがあるのでしょうか!?  ($argv[1];を$numに代入だと思います。間違っていたなら御免なさい。)  宜しくお願いします。  なお・批判的なご回答はお控えくださいませ。  

    • ベストアンサー
    • PHP
  • $argv[1] の真偽判定

    PHPの勉強を始めた初心者です。 次のようなスクリプトを書いてみたのですが、false と入力しても、真と判定されてしまいます。 何故こうなるのか、お教えいただければ幸いです。 <?php // p075_a.php if( isset($argv[1]) && $argv[1] ) { echo "与えられた引数は真です\n"; } elseif ( isset($argv[1]) && !$argv[1] ) { echo "与えられた引数は偽です\n"; } else { echo "引数が与えられていません\n"; } [study_php@localhost ch03]$ php p075_a.php '' 与えられた引数は偽です [study_php@localhost ch03]$ php p075_a.php "" 与えられた引数は偽です [study_php@localhost ch03]$ php p075_a.php 0 与えられた引数は偽です [study_php@localhost ch03]$ php p075_a.php 0.0 与えられた引数は真です [study_php@localhost ch03]$ php p075_a.php false 与えられた引数は真です [study_php@localhost ch03]$

    • ベストアンサー
    • PHP
  • issetで変数チェック

    php初心者です issetで変数の中に値が入っているか調べたいのですがphp5.4でフォームから文字列を送るとfalseになってしまいます。 文字列が入っているかチェックしたいのですがどうしたらいいでしょうか? if(isset($_POST['title'])&&$_POST['title']!=''){ $title = $_POST['title']; }else{ $title = ''; } よろしくお願いします

    • ベストアンサー
    • PHP

専門家に質問してみよう