• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:php演算子 )

PHP演算子の理解について

このQ&Aのポイント
  • PHP演算子について独学で勉強している初心者です。
  • 質問文章の中の式について説明します。
  • (5)行目の条件式の解釈方法について疑問があります。

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

  • ベストアンサー
回答No.2

質問者はほとんどわかっているように見えますがたぶんちょっとしたところで迷路になったんでしょう。 参考URLの三項演算子のところにわかりやすく書いてあります。一読することをお勧めします。 PHPのマニュアルは今後何度もお世話になるでしょうから今のうちに見方に慣れておいた方がいいでしょう。 初心者のために更にわかりやすくかみくだくと次のようになります。 まず、PHPでの真偽の判断について。 普通の条件式( $y > 100 とか)なら真偽はわかりやすいと思います。 わかりにくいのは単一の変数が条件式となったときですが、 ずばり 0 のときだけが偽、それ以外は真です。 0.1,1,100,-0.1,-1,-100は全て真とみなされます。 つぎに三項演算子と?:演算子について。 PHPには三項演算子というのがあります。?: 演算子というのもあります。 三項演算子の形は、式A ? 式B : 式C でこれ全体である値を返します。 つまり、式Aが真なら、全体は式Bとみなされ、式Aが偽なら全体が式Cとみなされます。 ?: 演算子の形は、式A ? 式C でこれ全体である値を返します。三項演算子の真ん中(式B)を書かない形といえます。 つまり、式Aが真なら全体は式Aとみなされ、式Aが偽なら全体は式Cとみなされます。 (2) $a = 10: (3) print( ( $a>0 ? " プラスです。" : "マイナスまたはゼロです"). "<br />" ); を読み下すと、 $aが0より大きいかどうか?大きいなら「プラスです。」と印字、そうでないなら「マイナスまたはゼロです」と印字。 今回は$aが10なので、式A $a>0 は真ですね。ですから「プラスです。」と印字されます。 (4) $a = 0; (5) print( ( $a ? : 10 )."<br />" ); を読み下すと、 $aが真か偽か?真なら$aの値そのまま偽なら10を印字。 今回は$aが0なので、式A $a は偽ですね。ですから全体の意味としては式Cが採用され、10が印字されます。 (6) $a = 5; (7) print( ( $a ? : 10 )."<br />" ); を読み下すと、 $aが真か偽か?真なら$aの値そのまま偽なら10を印字。 今回は$aが5なので、式A $a は真ですね。ですから全体の意味としては式Aが採用され、$aの値そのまま5が印字されます。

参考URL:
http://php.net/manual/ja/language.operators.comparison.php
hayaken73
質問者

お礼

>わかりにくいのは単一の変数が条件式となったときですが、 >ずばり 0 のときだけが偽、それ以外は真です。 >0.1,1,100,-0.1,-1,-100は全て真とみなされます。 ここの説明でやっとわかった気がします。 目からうろこです。 ただ、他の方の答えではマイナス表示も偽とあったのですが、 『0』のときだけが偽なのか、それともマイナス表示も偽なのかが ちょっと混同してしまっています。 実際は、『0』の場合のみが『偽』と覚え、マイナスは『真』でいいのですか?

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

> $a>0ならば、"プラスです。"を返す。つまり$a>0が条件を提示している感じがあるのですが・・・ 意味はそれでいいのですが、実際のコンピュータの動きが違います。 if (条件) などと参考書に書いてあることがあって、 $a > 0 が「条件」のように感じますが、本当は 「if (式) 」であって、「式の値が真か偽か」だけが分岐の判定に使われます。 では$a > 0 がなにかと言えば、「$aが0より大きかったら真、そうでないなら偽になる計算式」なのです。 $a>0 ? " プラスです。" : "マイナスまたはゼロです" は (1) $a > 0 を計算して、真またが偽になる (2) (1)の結果で :の前か後かを選択する という流れになります。 他の比較演算子(==,<=,>=等)も同様に、比較した結果から真または偽を返す計算をするものです。 では、「真」「偽」とはなにか、となると、以下は#2さんと同じになるので省略します。

hayaken73
質問者

お礼

わかりやすく、丁寧にご説明ありがとうございます。 色々なサイトを読んだのですが、1つつまずくと 前に進まなくなるので、基本をきちんと勉強していこうと思います。 ありがとうございました。

  • t_ohta
  • ベストアンサー率38% (5239/13708)
回答No.1

3行目の構文ですが、これは if の省略形です。 [戻り値] = [条件式] ? [真の時の処理] : [偽の時の処理] ; $a>0 が真の時"プラスです。" が返り、偽の時は"マイナスまたはゼロです"を返しています。 その返った値が print 文に渡るので、条件式の結果に応じて表示される結果が決まります。 5行目と7行目も同じif文の省略形です。 この場合 $a の中身が「真」なら $a の中身そのものを返し、「偽」なら 10 を返します。 PHPは変数の中身が 0 又は マイナスの値 の時は「偽」と判断し、それ以外は「真」と判断しますので、5行目は「偽」と判断されたため 10 が表示され、7行目は「真」と判断されたため$aの中身である5という値が表示されています。

hayaken73
質問者

お礼

ご丁寧に回答いただきありがとうございます。 $aの中身が「真」ならという意味がよく理解できていませんでした。 どうもありがとうございました。

関連するQ&A