- ベストアンサー
echo printのパラメータに変数を埋め込む時の問題について
初歩的な質問ですがPHPでecho print 命令を実行する問題について お聞きします。 $a=10; $b=20; $c=$a+$b; echo "答えは、$cです。"; //(1) echo "答えは、$c です。"; //(2) echo "答えは、".$c."です。"; //(3) を実行すると (1)は、答えは、まで表示してそれ以降が表示しません。 (2)は、$cに後ろに半角スペースを入れた場合で 「答えは、30 です。」と表示しますが、半角スペースが 入ってしまいます。 (3)は、特に問題なく「答えは、30です。」と表示します。 (1)のように書いた場合、うまく表示されない原因がわかりません。 よろしくお願いいたします。 テスト環境は、 OS:WindowsXP PHP5 Apache2.2 php.iniの文字コードは、UTF-8に設定しています。 ソースコードは、UTF-8で保存しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ダブルクォート内の$で始まる変数名は、最長のものが仮定されます。また、実はPHPの変数には、多バイト文字(URF-8では日本語はほとんど3バイト)も使えます。 したがって、1の例では「$cです。」が変数名と解釈されました。 { } で囲む事で、PHPに変数の範囲を明確に示す事ができます。 {$a[2]} {$a['hoge']} {$a->foo}のように、配列、連想配列、オブジェクトのプロパティ参照も{ }で囲めば書けます。
その他の回答 (3)
- masa6272
- ベストアンサー率66% (93/140)
正誤表 URF-8 -> UTF-8
- yambejp
- ベストアンサー率51% (3827/7415)
ちなみになぜパースされないかといえばPHPでは2バイト文字の 変数も存在できるからです。 <?php $a=10; $b=20; $c=$a+$b; $cです。="わかりません"; echo "答えは、$cです。"; ?> もとのソースでは「$cです。」変数になにも値がなかったので、 「答えは、」で表示が終了しているわけですね
お礼
大変参考になりました。ありがとうございます。
- yambejp
- ベストアンサー率51% (3827/7415)
$cのパースがプログラム側で判断できていないからでしょうね そういうときは明示的に変数を{}で囲みます。 <?php $a=10; $b=20; $c=$a+$b; echo "答えは、{$c}です。"; ?>
お礼
大変参考になりました。ありがとうございました。
お礼
大変詳しい説明ありがとうございます。 大変参考になりました。ありがとうございます。