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

連想配列を含むヒアドキュメントの書き方を教えてください。

以下のコードならうまく行きました。
-(1)--------------------------
$SS = $_SERVER['PHP_SELF'];
$html_txt = <<<EOT
($SS)
EOT;
echo $html_txt;
------------------------------

これを一時的な変数を使わずに以下のようなコードで実行したいです。

-(2)--------------------------
$html_txt = <<<EOT
($_SERVER['PHP_SELF'])
EOT;
echo $html_txt;
------------------------------

これを実行すると

# Parse error: syntax error, unexpected '"',
# expecting T_STRING or T_VARIABLE or T_NUM_STRING in …

というエラーが出てしまいます。


最悪、(1)でもいいと思っています。しかし(2)のようなケースでもできてもいいのではないかと思うのですが、エスケープを入れたり「$_SERVER["PHP_SELF"]」などとクォーテーションを変更したりしてもうまく行きません。

質問は以下です
・(2)のような記述はPHPでは不可能なのでしょうか?
・もし可能なら(1)の何が悪いのか、どうすればうまく行くのかを教えてください

よろしくお願いします。

A 回答 (3件)

もしくは



<?PHP
$html_txt = <<<EOT
($_SERVER[PHP_SELF])
EOT;
echo $html_txt;

備考: http://qiita.com/mpyw/items/8dd5378cb01c877e1f7b
    • good
    • 1
この回答へのお礼

おお。これでもいいんですね。
最初見たときは、「それじゃダメなんじゃないの?」と思ったのですが、試してみたらうまくいきました。

もしかしたらこれを見て戸惑う人もいるかもしれないので、あまり使用しないほうがいいのかもしれませんけど。

ありがとうございました

お礼日時:2014/06/23 23:13

PHPはマニュアルがよくできているので、マニュアルを読む習慣を付けるといいです。



http://www.php.net/manual/ja/language.types.stri …
ここに、
// 動作します。クォートしたキーを使う場合は、波括弧構文を使わなければなりません
と書いてあります。
    • good
    • 0
この回答へのお礼

>PHPはマニュアルがよくできているので、
>マニュアルを読む習慣を付けるといいです。

…。はい。まさにおっしゃるとおりです。
しかも私はそのページを見た上で質問をしました。

私が見たのはそのページの以下の4項目で
・引用符
・二重引用符
・ヒアドキュメント構文
・nowdoc 構文

それより下はサンプルコードが無駄に多いなと思いざっとしかみませんでした。

もう少し下も読めばよかったのですね…。
残念でした…。

ありがとうございました

お礼日時:2014/06/23 23:08

こうじゃない?



<?PHP
$html_txt = <<<EOT
({$_SERVER['PHP_SELF']})
EOT;
echo $html_txt;

この回答への補足

この3パターンはうまくいって
(a) ({$_SERVER['PHP_SELF']})
(b) ({$SS})
(c) ($SS)

これだけうまくいきませんでした。
(d) ($_SERVER['PHP_SELF'])

逆に何で(c)はいいの?
(c)はいいのになぜ(d)はダメなの?
という疑問が発生しました。

「{}」なしは省略形で、クォーテーションの無い単純な変数だけ省略できるという感じですかね。(自分で書いてて、この理由な気がしてきましたが…)

もしよろしければこの点についても教えてください。
よろしくお願いします。

補足日時:2014/06/23 20:23
    • good
    • 0
この回答へのお礼

は、あれ?なに?
確かにそのとおりです…。それでうまく行きました。
変なところでつまづいていました。

ありがとうございました

お礼日時:2014/06/23 20:16

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