![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
独学で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が多分変化しているから
答えが違うと思うのですが、ここは今度どう理解するのでしょうか。
初心者ゆえ、子供でもわかるやさしい表現でお願いできれば幸いです。
よろしくお願いします。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
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.comp …
>わかりにくいのは単一の変数が条件式となったときですが、
>ずばり 0 のときだけが偽、それ以外は真です。
>0.1,1,100,-0.1,-1,-100は全て真とみなされます。
ここの説明でやっとわかった気がします。
目からうろこです。
ただ、他の方の答えではマイナス表示も偽とあったのですが、
『0』のときだけが偽なのか、それともマイナス表示も偽なのかが
ちょっと混同してしまっています。
実際は、『0』の場合のみが『偽』と覚え、マイナスは『真』でいいのですか?
No.3
- 回答日時:
> $a>0ならば、"プラスです。
"を返す。つまり$a>0が条件を提示している感じがあるのですが・・・意味はそれでいいのですが、実際のコンピュータの動きが違います。
if (条件) などと参考書に書いてあることがあって、 $a > 0 が「条件」のように感じますが、本当は
「if (式) 」であって、「式の値が真か偽か」だけが分岐の判定に使われます。
では$a > 0 がなにかと言えば、「$aが0より大きかったら真、そうでないなら偽になる計算式」なのです。
$a>0 ? " プラスです。" : "マイナスまたはゼロです"
は
(1) $a > 0 を計算して、真またが偽になる
(2) (1)の結果で :の前か後かを選択する
という流れになります。
他の比較演算子(==,<=,>=等)も同様に、比較した結果から真または偽を返す計算をするものです。
では、「真」「偽」とはなにか、となると、以下は#2さんと同じになるので省略します。
わかりやすく、丁寧にご説明ありがとうございます。
色々なサイトを読んだのですが、1つつまずくと
前に進まなくなるので、基本をきちんと勉強していこうと思います。
ありがとうございました。
No.1
- 回答日時:
3行目の構文ですが、これは if の省略形です。
[戻り値] = [条件式] ? [真の時の処理] : [偽の時の処理] ;
$a>0 が真の時"プラスです。" が返り、偽の時は"マイナスまたはゼロです"を返しています。
その返った値が print 文に渡るので、条件式の結果に応じて表示される結果が決まります。
5行目と7行目も同じif文の省略形です。
この場合 $a の中身が「真」なら $a の中身そのものを返し、「偽」なら 10 を返します。
PHPは変数の中身が 0 又は マイナスの値 の時は「偽」と判断し、それ以外は「真」と判断しますので、5行目は「偽」と判断されたため 10 が表示され、7行目は「真」と判断されたため$aの中身である5という値が表示されています。
ご丁寧に回答いただきありがとうございます。
$aの中身が「真」ならという意味がよく理解できていませんでした。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- 高校 対数方程式につきまして 4 2022/05/05 07:55
- PHP PHP ページング データベース 1 2022/06/16 10:30
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- その他(職業・資格) 弁理士試験の勉強方法について 1 2022/09/11 07:32
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP WordpressのPHPを安全に編集する方法 1 2022/08/04 01:43
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vbYesNoの使い方
-
$str='AbcAdefgA';の中のAの出...
-
PHPのif文「POSTしていな...
-
PHPを勉強中なのですが一点わか...
-
日付を基にした乱数生成
-
split関数とexplode関数の違い...
-
if (isset($_a)&&$_a)この意味は
-
変数 $x=1と$y=1 参考書は間違...
-
PHPの<textarea>表示について。
-
変数に禁止された文字が含まれ...
-
switch文で2つ以上の変数の値...
-
このプログラムを説明すにあたり!
-
ブラウザ上でリストの出し入れ
-
アクセスキーについて
-
検索プログラムの10件表示について
-
Dosブロンプトでtabを出力したい
-
バッチファイルでpingの結果を...
-
wordの差し込み印刷で文字...
-
「取得先」という表現について
-
開始と終了を指定して、その間...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<A href ~で複数の値を渡したい
-
日付を基にした乱数生成
-
テーブルに送信ボタンをつける
-
「次の10件を表示する」のよ...
-
PHPでwait処理ってできます?
-
なぜエラーが出るのか分からな...
-
null代入とunset()の違いについて
-
PHPのif文「POSTしていな...
-
if (isset($_a)&&$_a)この意味は
-
microtime関数は、結構イイカゲ...
-
アクセスキーについて
-
POSTされたかどうか確かめる方...
-
複合演算子につきまして!
-
Luaにて、and or の組み合わせ...
-
$_SERVER["QUERY_STRING"]の仕...
-
PHPでのNULLの正規表現
-
PHPのGETパラメーターの検索値...
-
データ)表示件数について
-
SQLにあるデータをWEB画面に出...
-
vbYesNoの使い方
おすすめ情報