- ベストアンサー
連想配列を含むヒアドキュメントの書き方
- 連想配列を含むヒアドキュメントの書き方について教えてください。新たな変数を使用せずにコードを実行したい場合、エラーが発生してしまいます。
- PHPでは、(2)のようなヒアドキュメント内で直接連想配列を参照することはできません。エスケープや引用符の変更などの対応策もうまくいきません。
- 一方、(1)のように一時的な変数を使用して連想配列を含むヒアドキュメントを作成する方法は有効です。エラーのリスクを回避しながらコードを実行することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
もしくは <?PHP $html_txt = <<<EOT ($_SERVER[PHP_SELF]) EOT; echo $html_txt; 備考: http://qiita.com/mpyw/items/8dd5378cb01c877e1f7b
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10358)
PHPはマニュアルがよくできているので、マニュアルを読む習慣を付けるといいです。 http://www.php.net/manual/ja/language.types.string.php#language.types.string.parsing ここに、 // 動作します。クォートしたキーを使う場合は、波括弧構文を使わなければなりません と書いてあります。
お礼
>PHPはマニュアルがよくできているので、 >マニュアルを読む習慣を付けるといいです。 …。はい。まさにおっしゃるとおりです。 しかも私はそのページを見た上で質問をしました。 私が見たのはそのページの以下の4項目で ・引用符 ・二重引用符 ・ヒアドキュメント構文 ・nowdoc 構文 それより下はサンプルコードが無駄に多いなと思いざっとしかみませんでした。 もう少し下も読めばよかったのですね…。 残念でした…。 ありがとうございました
- yambejp
- ベストアンサー率51% (3827/7415)
こうじゃない? <?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)はダメなの? という疑問が発生しました。 「{}」なしは省略形で、クォーテーションの無い単純な変数だけ省略できるという感じですかね。(自分で書いてて、この理由な気がしてきましたが…) もしよろしければこの点についても教えてください。 よろしくお願いします。
お礼
おお。これでもいいんですね。 最初見たときは、「それじゃダメなんじゃないの?」と思ったのですが、試してみたらうまくいきました。 もしかしたらこれを見て戸惑う人もいるかもしれないので、あまり使用しないほうがいいのかもしれませんけど。 ありがとうございました