ヒアドキュメント
PHP Manual:文字列 ヒアドキュメント
PHP:5.4.7
WordPress なのか iG:Syntax Hiliter なのか
<<< という記述をすると、表示が乱れるので
<<< と表記してある。
でも、最後のコード表記は大丈夫なのよね~・・・。
- <<<EOD
- hogehoge
- EOD
- ;
- // PHP 5.3.0 以降、開始 ID をダブルクォーテーションで囲めるように。
- // Nowdoc との違いを明示するのが目的?
- <<<"EOM"
- hogehoge
- EOM
- ;
ヒアドキュメントを識別するためのもの。
上記例では、EOD が該当する。
- 英数字およびアンダースコアのみ
- 数字でない文字またはアンダースコアで始まる必要がある
- 終端 ID がある行には、セミコロン (;) 以外の他の文字が含まれていてはならない
- ID はインデントしてはならない
- セミコロンの前に空白やタブを付けてはいけない
- 終端 ID の前の最初の文字は、使用するオペレーティングシステムで定義された 改行である必要がある
- 最後の区切り文字の後にもまた、改行を入れる必要がある
- $foo = <<<EOD
- hogehoge
- EOD;
よく上記のようなスクリプトを見かけるけど
最後の ;(セミコロン)は、あくまでも $foo = に対するものであって
ヒアドキュメントとは関係ない。
つまり、下記のように記述すればイメージしやすい。
- $foo = <<<EOD
- hogehoge
- EOD
- ;
変数は、そのまま記述すればパースされる。
- echo <<<EOT
- My name is "$name". I am printing some $foo->foo.
- Now, I am printing some {$foo->bar[1]}.
- This should print a capital 'A': \x41
- EOT;
- // 出力結果
- My name is "MyName". I am printing some Foo.
- Now, I am printing some Bar2.
- This should print a capital 'A': A
PHP Manual:文字列 変数のパース
これを読んでも、「簡単」と「複雑」の定義がはっきりしないので
全て {}(波括弧、中括弧)を付けるほうが安全かも?
定数や関数は $(ドル)から始まらないので、処理不能・・・?
最初に Google 先生に質問したら、
「定数や関数は使えない」という回答ばっかり引っかかってきたけど
2回目の質問では、アッサリと解決策が。
Blog:PHPのヒアドキュメント内で定数や関数を動かす
Web、ときどきDTP。(うぇヴ(web)屋のネタ帳。):PHPのヒアドキュメント内で関数を使う。計算もしたい。
クラスを用意して、そのメンバ変数やメソッドとして利用する。
定数は、そのまま変数にしてしまえばよい。
関数は、可変変数を用いて処理。
直接出力しても
- echo <<<EOD
- hogehoge
- EOD;
変数に代入してもよい。
- $foo = <<<EOD
- hogehoge
- EOD;
PHP 5.3.0 以降の機能。
ヒアドキュメントはダブルクォーテーションで括られた文字列として扱われるのに対して
Nowdoc は、シングルクォーテーションで括られた文字列として扱われる。
中身について、パース処理を行わないので、エスケープをする必要がなくなる。
SGML の
開始 ID を、シングルクォーテーションで括る。
- <<<'EOD'
- hogehoge
- EOD
- echo <<<'EOT'
- My name is "$name". I am printing some $foo->foo.
- Now, I am printing some {$foo->bar[1]}.
- This should not print a capital 'A': \x41
- EOT;
- // 出力結果
- My name is "$name". I am printing some $foo->foo.
- Now, I am printing some {$foo->bar[1]}.
- This should not print a capital 'A': \x41
すたら日記:PHP ヒアドキュメントの使い方:2通り