dポイントプレゼントキャンペーン実施中!

独学で1週間程前からPHPの勉強を始めた超初心者です。
よろしくお願いします。

以下の式についてです。
----------------------------------------------------------------------------------
(1) <?php 
(2) $a = 10:
(3) print( ( $a>0 ? " プラスです。" : "マイナスまたはゼロです"). "<br />" );
(4) $a = 0;
(5) print( ( $a ? : 10 )."<br />" );
(6) $a = 5;
(7) print( ( $a ? : 10 )."<br />" );
----------------------------------------------------------------------------------

------------
プラスです。
10
5
------------

となるようですが、

まず(3)行目の式は理解できます。$a>0ならば、"プラスです。"を返す。つまり$a>0が条件を提示している感じがあるのですが・・・

(5)行目の
$a ?がTrueならば、$aを返し、そうでなければ10を返す、というここが問題なのですが

そもそも

『 $a ? 』

が条件の式であるように理解できません。つまり『何何がなになにならば・・』と
どう解釈するのでしょうか。

同じく(7)の条件部分も同じ事だと思うのですが、今度は$aが多分変化しているから
答えが違うと思うのですが、ここは今度どう理解するのでしょうか。

初心者ゆえ、子供でもわかるやさしい表現でお願いできれば幸いです。

よろしくお願いします。

A 回答 (3件)

質問者はほとんどわかっているように見えますがたぶんちょっとしたところで迷路になったんでしょう。



参考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.comp …
    • good
    • 0
この回答へのお礼

>わかりにくいのは単一の変数が条件式となったときですが、
>ずばり 0 のときだけが偽、それ以外は真です。
>0.1,1,100,-0.1,-1,-100は全て真とみなされます。

ここの説明でやっとわかった気がします。
目からうろこです。

ただ、他の方の答えではマイナス表示も偽とあったのですが、
『0』のときだけが偽なのか、それともマイナス表示も偽なのかが
ちょっと混同してしまっています。

実際は、『0』の場合のみが『偽』と覚え、マイナスは『真』でいいのですか?

お礼日時:2012/04/09 23:34

> $a>0ならば、"プラスです。

"を返す。つまり$a>0が条件を提示している感じがあるのですが・・・

意味はそれでいいのですが、実際のコンピュータの動きが違います。

if (条件) などと参考書に書いてあることがあって、 $a > 0 が「条件」のように感じますが、本当は
「if (式) 」であって、「式の値が真か偽か」だけが分岐の判定に使われます。

では$a > 0 がなにかと言えば、「$aが0より大きかったら真、そうでないなら偽になる計算式」なのです。

$a>0 ? " プラスです。" : "マイナスまたはゼロです"

(1) $a > 0 を計算して、真またが偽になる
(2) (1)の結果で :の前か後かを選択する
という流れになります。

他の比較演算子(==,<=,>=等)も同様に、比較した結果から真または偽を返す計算をするものです。


では、「真」「偽」とはなにか、となると、以下は#2さんと同じになるので省略します。
    • good
    • 0
この回答へのお礼

わかりやすく、丁寧にご説明ありがとうございます。

色々なサイトを読んだのですが、1つつまずくと
前に進まなくなるので、基本をきちんと勉強していこうと思います。

ありがとうございました。

お礼日時:2012/04/09 23:39

3行目の構文ですが、これは if の省略形です。


[戻り値] = [条件式] ? [真の時の処理] : [偽の時の処理] ;
$a>0 が真の時"プラスです。" が返り、偽の時は"マイナスまたはゼロです"を返しています。
その返った値が print 文に渡るので、条件式の結果に応じて表示される結果が決まります。

5行目と7行目も同じif文の省略形です。
この場合 $a の中身が「真」なら $a の中身そのものを返し、「偽」なら 10 を返します。
PHPは変数の中身が 0 又は マイナスの値 の時は「偽」と判断し、それ以外は「真」と判断しますので、5行目は「偽」と判断されたため 10 が表示され、7行目は「真」と判断されたため$aの中身である5という値が表示されています。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/04/09 23:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!