• ベストアンサー

ヒアドキュメント内での変数の扱い

ヒアドキュメント内で変数を入れるとそれ以降の文字が出てきません 半角スペースで変数の後を1つあけてやるとうまく出ますが、表示にも半角スペースが空くので見栄えが良くないので修正したいのですが、どうしたらいいでしょうか。 \を変数の後に入れてみましたが、これでも変数の後は表示されたのですが、\まで表示されてしまいます。 例: $foo = "変数"; print<<<DOC_END 文字$fooあと DOC_END; これだと「あと」が表示されない $foo = "変数"; print<<<DOC_END 文字$foo\あと DOC_END; これだと「文字変数\あと」となる \の代わりに半角スペースを入れると変数とあとの間に半角スペースも表示される

  • choei
  • お礼率63% (286/451)
  • PHP
  • 回答数2
  • ありがとう数3

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

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

公式のドキュメントから記述が見つからなかったけれど 当方のPHP 6(独自ビルド)では <?php $foo = "変数"; print<<<DOC_END 文字${foo}あと DOC_END; ?> で 文字変数あと と表示されました。 #明確な仕様がないのが…

choei
質問者

お礼

早速の回答ありがとうございます。 当方PHP5ですが、教えて頂いた${foo}で書くやり方でうまくいきました {}をここで使えることを知りませんでした。 ありがとうございました。

その他の回答 (1)

  • kyo999
  • ベストアンサー率64% (34/53)
回答No.2

変数$fooが後ろの「あと」とくっついて別の変数(「$fooあと」)とみなされてるのではないでしょうか? 試しに↓のようにしたら $foo = "変数"; $fooあと = "テスト"; print<<<DOC_END 文字$fooあと 行末<br> 次の行$foo $fooあと DOC_END; 表示結果は↓になりました(文字コードUTF-8) 文字テスト 行末 次の行変数 テスト ヒアドキュメントに限らず文字列の処理では、変数の前後が半角スペースなど変数が確実に識別できる場合以外は#1さんのように{}カッコで括られるのが安全です。

choei
質問者

お礼

ありがとうございます。 持っているどのPHPの本もサンプルなどは全て{}でくくってないので{}でくくれることを知りませんでした

関連するQ&A

  • ヒアドキュメントでの変数値の表示について

    以下にようにヒアドキュメントを利用して変数を表示させたいのですが、時々、正常に変数の値が表示されない場合があります。 前後に全角スペースなどを追加してみても表示されませんが、単独で変数値をechoすると表示されます。 どういった要因で表示されないのか、ご存知でしたら教えて頂きたいのですが。。 宜しくお願いします。 例)-------------------------------     print <<<EOD      <TABLE>      <TR>      <TD>$TEST</TD>      </TR>      </TABLE>     EOD; -----------------------------------

    • ベストアンサー
    • PHP
  • 変数を文字の間にいれて表示させたい。

    例えば、 私の年は20です。 のように表示させたい場合に、 $i = 20; print("私の年は$iです。"); と書くと、「私の年は」以降が表示されません。 print("私の年は$i"); であれば、表示されるようなのですが、文字の間に変数を入れたい場合はどのように書けばよいのでしょうか?

    • ベストアンサー
    • PHP
  • Bシェルで不定変数名を変数として取り扱うには

    ファイル(test.txtとします)に 0755 $HOGE/herehere $FOO/bar のような形で変数を示す文字列がはいっています。 どんな変数名かは事前にわかりません。 これをシェルプログラムで、 $が付いていたら変数名と解釈して使用したいです。 どんな変数名がファイルに含まれているかがわかっているなら、 以下のようにできたのですが、 変数名が不明のときにはどうしたらファイルに含まれている変数を そのまま使用できるのでしょうか。 HOGE=`command HOGE` #HOGEを引数にcommandコマンドを呼び出した結果を$HOGEとする FOO=`command FOO` #↑test.txtの中には$HOGEや$FOOが何度も出てくるので、 #出てくるたびにcommandコマンドを使うのは避けたい。 while read LINE do  FILE=`echo $LINE|sed "s%"'$HOGE'"%$HOGE%g"` done < /test.txt

  • PHPの参照渡しについて

    以下のようなコードがあったとき $obj = new stdClass(); $foo = $obj; この場合、動作は いわゆる【参照の値渡し】というとらえかたでよいのでしょうか? 変数$obj には、 new stdClass();という記述によって 新規に作成されたオブジェクトの参照(※正確には別のメモリ内に保持されたオブジェクトのアドレス) が保持されるわけですよね? そのとき $foo = $obj; というコードは$objが保持するオブジェクトのアドレス値を$fooという変数にも コピーするという動作を意味するわけですよね。 この場合、両変数を用いて生成されたオブジェクトのプロパティなどの状態を 共有することとができます。 しかしながら変数$fooに別の値、例えば文字列を代入すうると $foo = "文字列"; とすると$fooの値が変更され$objの値は変更されません。 対して、次のようなコードがあった場合 $foo = &$obj; というコード、これはPHPにおける参照渡しですが、 この場合は$objが指し示す、オブジェクトが保持されているメモリ上のアドレスではなく そのメモリ上に確保された変数$objそのもののアドレスが$fooという変数にコピー? されるのでしょうか? この明示的な参照渡しだと、オブジェクトの状態を共有するのはもちろん $foo = "オブジェクト破棄"; と片方に文字列を代入すると print $obj; 同様に文字列にかわってしまいます。 この本来の意味?であろう参照渡しとは実際 $fooに変数$objそのもののアドレスが保持されるという 解釈でよいのでしょうか? おくわしいかたご教授ください。

    • ベストアンサー
    • PHP
  • エクセルのマクロ(VBA)の変数でスペースを認識しません

    お世話になります。エクセルのマクロ(VBA)を組んでいてどうしても解せないことがあります。 Data1 = "9" Data2 = "               "(←スペースはとりあえず半角30文字とでもしておきます。) Data = Data1 & Data2 Range("a1").Value = Data 上記の命令を実行すると、9のあとに半角スペースが30文字分ある文字データが入力されると思うのですが、実際には9の数字データだけが入力されてしまいます。つまりスペースだけのData2という変数は無視されているみたいです。 一方、2行目を例えば Data2 = "               x" と、スペースのあとに一文字入れるとA1カラムには "9               x" と表示されます。 これはどういった現象なのでしょうか?また、スペースだけの文字列を変数として認識させるのはどうすれば良いのでしょうか? よろしくお願いします。 ※この質問を書いていて変に思いました。質問の文中にあるダブルクォーテーションの中のスペースは半角で入力すると全て無視されて""となってしまいます。全角で15文字分のスペースを入れたら入りました。この辺も同じような理由によるものでしょうか・・・

  • htmlで変数の表示

    printで出力する以外にHTMLに簡単に変数を表示する方法ってありますか? <?php $hoge = "晴れ"; ?> ここからHTML、直接変数を表示したい 今日は$hogeです

    • ベストアンサー
    • PHP
  • Perl あっていますでしょうか?

    " " と ' ' の相違は? ""の内にある変数名は、その値に変換されます。 ''の内にあるものは、そのまま文字列として扱われます。 エスケープシーケンスは "" の内に記述した場合のみです。 $a="Hello"; 文字列Helloを変数$aに代入する。 $b="$a"; 変数$aを変数$bに代入する。 $c='$a'; $aという文字列を変数$cに代入する。 ""の内で""を使うことは出来ません。 ''の内で''も使うことは出来ません。 使うときはエスケープシーケンスを使います。 print "\"Hello\"\n"; 文字列"Hello"を表示させます。 print "'Hello'"; 'Hello'を表示させます。 ""の内で''又は''の内で""を使うことは出来ます。 $a="あいうえお"; 文字列 あいうえお を変数$aに代入する。 print "\n$a\n"; 改行して あいうえお表示して 改行する。 print '\n$a'; 文字列\n$aを表示する。 文字列の結合 . (ピリオド)を使って前後の文字列を連結することが可能です。 $a="Hello"." "."World"; 変数$aに文字列Helloと半角スペースとWorldをつないだものを代入します。 $a="c"x3; 変数$aに文字cを3回つないだものを代入します。 $a="A"; 文字Aを変数$aに代入する。 $b="B"; 文字Bを変数$bに代入する。 $c="C"; 文字Cを変数$cに代入する。 print $a.$bx3.$c; 文字Aと文字Bを3回結合したものと文字Cを表示する。 画面にはabbbcと表示されます。

    • ベストアンサー
    • Perl
  • 変数の構造について

    初歩的な質問ですみません。 以下のような変数はどんな構造になっているのでしょうか? 配列の中にハッシュが入っているのかと思っているのですが・・ $list = [ { id => '1', name => 'hoge' }, { id => '2', name => 'fuga' }, { id => '3', name => 'foo' } ]; 上記の$listにあるidを全て出力しようとして以下のようにしても 出力することができません。 foreach ($list) { print $_['id']; print '<br>'; } また「[]、{}」は何を意味するのでしょうか? 当方、PHPには詳しいのですがPerlは最近始めたばかりでよく理解できておりません。 お手数ですが、どなたかお分かりになる方いましたらご教授いただければと思います。

    • ベストアンサー
    • CGI
  • "$"を変数に入れる

    CGIを改造中です。 変なことをしているかもしれませんが、変数に$と別の変数を入れたいんです。 「xx.cgi?h=1」でCGIに変数を送り、$hensuuに「$hen1」と代入したいんです。 で、以下のようにやってみました。 $hensuu = '$hen'; もちろん、「print "$hensuu\n";」とすると「$hen」と表示します。 $hensuu = '$hen'$h;や $hensuu = '$hen'"$h";とすると、エラーになりストップします。 どのようにしたらうまくいくのでしょうか?

    • ベストアンサー
    • Perl
  • perlの内容なのですがこれで合っていますでしょうか?

    print 関数は文字列や数値だけでなく、変数を指定してその値を表示することもできます。 $a=1; 1を$aに代入する。 print $a; 変数$aの値を表示させる。 $a=2; 変数$aに2を代入する。 $b=3; 変数$bに3を代入する。 print "変数\$aに変数\$bを代入\n"; 「変数$aに変数$bを代入」という文字を表示させて改行する。 $a=$b; 変数$bの値を変数$aに代入する。 print "\$a="; 「$a=」を表示させる。 print $a; 変数$aの値を表示させる。 print ",\$b="; 「,$b=」を表示させる。 print $b; 変数$bの値を表示させる。 print "\n"; 改行を表示させる。 実行結果は↓↓↓↓↓↓↓ 変数$aに変数$bを代入 $a=3,$b=3 変数の書き方 文は ; で区切るが、1行に並べることも可能。 $a=2; $b=3; ↓ $a=2; $b=3; 複数の変数に、同時に値を代入することも可能。 $a=2; $b=2; ↓ $a=$b=2;

    • ベストアンサー
    • Perl

専門家に質問してみよう