• ベストアンサー

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で保存しています。

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

  • ベストアンサー
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.3

ダブルクォート内の$で始まる変数名は、最長のものが仮定されます。また、実はPHPの変数には、多バイト文字(URF-8では日本語はほとんど3バイト)も使えます。 したがって、1の例では「$cです。」が変数名と解釈されました。 { } で囲む事で、PHPに変数の範囲を明確に示す事ができます。 {$a[2]} {$a['hoge']} {$a->foo}のように、配列、連想配列、オブジェクトのプロパティ参照も{ }で囲めば書けます。

LACOMS
質問者

お礼

大変詳しい説明ありがとうございます。 大変参考になりました。ありがとうございます。

その他の回答 (3)

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.4

正誤表 URF-8 -> UTF-8

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ちなみになぜパースされないかといえばPHPでは2バイト文字の 変数も存在できるからです。 <?php $a=10; $b=20; $c=$a+$b; $cです。="わかりません"; echo "答えは、$cです。"; ?> もとのソースでは「$cです。」変数になにも値がなかったので、 「答えは、」で表示が終了しているわけですね

LACOMS
質問者

お礼

大変参考になりました。ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

$cのパースがプログラム側で判断できていないからでしょうね そういうときは明示的に変数を{}で囲みます。 <?php $a=10; $b=20; $c=$a+$b; echo "答えは、{$c}です。"; ?>

LACOMS
質問者

お礼

大変参考になりました。ありがとうございました。

関連するQ&A