三項演算子で違いが判らない

このQ&Aのポイント
  • 変数「$data」が10以上の場合は「10以上」と表示し、それ以外の場合は「10以下」と表示する三項演算子についての質問です。
  • 質問者は一つ目のコードは理解できるが、二つ目のコードが理解できないと述べています。
  • 質問者は二つのコードが同じ三項演算子であることに気づいており、違いを教えてほしいとしています。
回答を見る
  • ベストアンサー

 三項演算子で違いが判らない

 三項演算子で 変数「$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
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

>$str = ($data >= 10)?"10以上":"10以下"; こちらは三項演算子。 >if (isset($argv[1])){ > $param = $argv[1]; >} else { > $param = 'default'; >} こちらは三項演算子と「同じ意味」になるように、if文で展開されたもの… ではありませんか? $param = isset($argv[1]) ? $argv[1] : 'default'; をif文に展開すると同義になるかと。

Campus2
質問者

お礼

 ご回答誠にありがとうございました。  以下構文で! <?php $data = 10; $str = ($data >= 10)?"10以上":"10未満"; print $str; ?>    以上ですが、最初のご紹介した構文の、$data = 15;を10;に、10以下を10未満に変えました。      $data = 10;を操作することにより10以上、10未満 と変化します。  そらが論理的なやり方なのか、わかりませんが、試したら私的には都合が良かったです。    あと    if文で展開ですが、定番とのことで、少し勉強してみます。  

その他の回答 (2)

  • ahoo_ok
  • ベストアンサー率31% (30/95)
回答No.3

>$str = ($data >= 10)?"10以上":"10以下"; 質問者は、算数レベルの事理解できている? 10以下はあり得ない。 10未満な 以下と未満の使い分けできるか?

Campus2
質問者

補足

 STAP細胞論文じゃないけど!以下のサイトから「こぴぺ」で鵜呑みしました。   http://www.php-ref.com/basic/02_san_enzan.html   公の場に出す場合は!  ちゃんと見直さないと、STOP細胞に変化しますからね^^・ちょっぴり残念_ _

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

>if (isset($argv[1])){ >$param = $argv[1]; >} else { >    $param = 'default'; >} これは単なる if 構文ですよね。三項演算子で書くなら $param = isset($argv[1]) ? $argv[1] : 'default'; です。$paramに$argv[1]が存在したら$argv[1]を、そうでなければ'default'を代入します。POSTデータの代入などでは $name = isset($_POST['name']) ? $_POST['name'] : ''; といった書き方を多用します(ほとんど定石の記法です)。

関連するQ&A

  • 条件演算子

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

    • ベストアンサー
    • PHP
  • よくわからなかったので試してみました。

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

    • ベストアンサー
    • 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通りの表記方法がありますが、これは演算子の優先順位(注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];はどんな働きがありますか!?

    <?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
  • 量子力学における演算子と変数

    量子力学におえける演算子とは何かよくわからなくて困っています プログラミングをやっているのでプログラミングの話をしますが、プログラミングにおいて演算子とは、感覚的に言えばある変数を引数にして処理をするための関数的なもの + - x / の四則演算子が基本 sin() exp()などが演算子と言われても理解できるのですが 量子力学では、位置を表すxやyなども演算子として扱うと言われ プログラミング的にはそれらは関数のオペランドであり変数なので混乱しています 誰か上手く説明できる方がいらっしゃったら教えて下さい Ψを使った演算子の交換についての項で詰まっています

  •  %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
  • Objective-c 3項演算子で代入できない

    Objective-c 2.0で3項演算子を用いてプロパティに代入演算子で代入を行おうとすると Expression is not assignableエラーになります。 なぜでしょうか? 1.エラーになる例 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; BOOL flag = YES; flag == YES ? label.text = @"a" : label.text = @"b"; // ここでエラー 2.3行目をsetTextメッセージに置き換えるとエラーは出なくなります。 flag == YES ? [label setText:@"a"] : [label setText:@"b"]; // これはOK 3.if文に置き換えてもエラーは出ません。 if(flag == YES) label.text = @"a"; // これもOK else label.text = @"b"; // これもOK 1.と2.の書き方は等価だと思っていたのですが、どうやら等価ではないということは わかりました。では、どう違うのかというと、そこまでの理解には自力では至れませんでした。 1.だとnot assignableなのに3.だと問題ない理由もわかりません。 何か理解のためのヒントをいただけないでしょうか? よろしくお願いします。 環境: XCode Version 4.3.2 (4E2002) Apple LLVM Compiler 3.1

  • 加減剰余のオーバーフローについて

    今C言語で加減剰余のプログラムを作っていて、 オーバーフローのチェックだけが上手くいきません。 limits.hをインクルードして、オーバーフローのチェック を行いたいのですがどうすればよいのでしょうか? 扱いたい範囲はint型の-2147483648~2147483647です。 ちなみに開発環境はvc++2005です。 一応ソースを載せておきますので、よろしくお願いします。 #pragma warning ( disable : 4996 ) #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <limits.h> int main ( int argc, char *argv[] ) { int start; // 最初に入力する値(引数1) int end; // 最後に入力する値(引数3) int kekka; // 計算結果を格納 int amari; // 除算の余りを格納 int max = INT_MAX; // 表すことが出来る最大値 int min = INT_MIN; // 表すことが出来る最小値 char enzansi; // 入力する演算子 (引数2) char str1[512]; // 格納用の配列を宣言(start用) char str2[512]; // 格納用の配列を宣言(end用) /* 引数の個数チェック */ if ( argc != 4 ) { printf ( "usage : %s start enzansi end\n", argv[0] ); exit ( 0 ); } /* 引数を取得して整数型に変換 */ start = atoi ( argv[1] ); end = atoi ( argv[3] ); /* 引数の取得 */ enzansi = ( argv[2][0] ); sprintf ( str1, "%d", start ); // str1に値を格納 sprintf ( str2, "%d", end ); // str2に値を格納 /* str1とargv[1]による文字列の比較 */ if ( strcmp ( str1, argv[1] ) ) { printf ( "error : 整数を入力して下さい。\n" ); exit ( 0 ); /* str2とargv[3]による文字列の比較 */ } else if ( strcmp ( str2, argv[3] ) ) { printf ( "error : 整数を入力して下さい。\n" ); exit ( 0 ); /* argv[2]が2文字以上の場合 */ } else if ( strlen ( argv[2] ) >= 2 ) { printf ( "error : 演算子を正しく入力して下さい。\n" ); exit ( 0 ); } /* 入力された演算子の条件ごとに計算 */ if ( enzansi == '+' ) { kekka = start + end; } else if ( enzansi == '-' ) { kekka = start - end; } else if ( enzansi == '*' ) { kekka = start * end; } else if ( enzansi == '/' ) { /* startの値を0で除算する場合 */ if ( end == 0 ) { printf ( "error : 0による除算は禁止です。\n" ); exit ( 0 ); } kekka = start % end; // 剰余を求める /* 割り算の結果として余りが出なかった場合 */ if ( kekka == 0 ) { kekka = start / end; printf ( "%d %c %d = %d", start, enzansi, end, kekka ); exit ( 0 ); /* 割り算の結果として余りが出た場合 */ } else if ( kekka != 0 ) { kekka = start / end; amari = start % end; printf ( "%d %c %d = %d余り%d", start, enzansi, end, kekka, amari ); exit ( 0 ); } /* 入力された演算子が異なる場合 */ } else { printf ( "error : '+' '-' '*' '/'のいずれかの演算子を入力して下さい。\n" ); exit ( 0 ); } /* 数値1 演算子 数値2 = 演算結果の形式で出力する */ printf ( "%d %c %d = %d", start, enzansi, end, kekka ); exit ( 0 ); } もし変な部分がありましたら指摘お願いします。 一応四則演算は問題なくできます。

  • SCRIPTの意味を教えてください

    PHPにて実体参照について調べています。 以下のソースになんとなく興味が沸くのですがどういう処理をするためのものなのかよく分かりません。よかったら教えてください。 function append (&$str1, $str2="") { if (!isset($str1) ) { $str1=""; } $str1 .= $str2; }

    • ベストアンサー
    • PHP

専門家に質問してみよう