ヒアドキュメント

Posted by muchag | PHP |
初回投稿:2016-01-16 (土) 10:53:42 | 最終更新:2016-01-16 (土) 12:14:27

なが~い文字列を扱うための構文。

PHP Manual:文字列 ヒアドキュメント

【環境】
PHP:5.4.7
注意

WordPress なのか iG:Syntax Hiliter なのか
<<< という記述をすると、表示が乱れるので <<< と表記してある。 でも、最後のコード表記は大丈夫なのよね~・・・。

書式
  1. &lt;&lt;&lt;EOD
  2. hogehoge
  3. EOD
  4. ;
  5.  
  6. // PHP 5.3.0 以降、開始 ID をダブルクォーテーションで囲めるように。
  7. // Nowdoc との違いを明示するのが目的?
  8. &lt;&lt;&lt;"EOM"
  9. hogehoge
  10. EOM
  11. ;
ID

ヒアドキュメントを識別するためのもの。
上記例では、EOD が該当する。

ルール
  • 英数字およびアンダースコアのみ
  • 数字でない文字またはアンダースコアで始まる必要がある
  • 終端 ID がある行には、セミコロン (;) 以外の他の文字が含まれていてはならない
  • ID はインデントしてはならない
  • セミコロンの前に空白やタブを付けてはいけない
  • 終端 ID の前の最初の文字は、使用するオペレーティングシステムで定義された 改行である必要がある
  • 最後の区切り文字の後にもまた、改行を入れる必要がある
;(セミコロン)
  1. $foo = &lt;&lt;&lt;EOD
  2. hogehoge
  3. EOD;

よく上記のようなスクリプトを見かけるけど
最後の ;(セミコロン)は、あくまでも $foo = に対するものであって
ヒアドキュメントとは関係ない。

つまり、下記のように記述すればイメージしやすい。

  1. $foo = &lt;&lt;&lt;EOD
  2. hogehoge
  3. EOD
  4. ;
文字列部

変数は、そのまま記述すればパースされる。

  1. echo &lt;&lt;&lt;EOT
  2. My name is "$name". I am printing some $foo->foo.
  3. Now, I am printing some {$foo->bar[1]}.
  4. This should print a capital 'A': \x41
  5. EOT;
  6.  
  7. // 出力結果
  8. My name is "MyName". I am printing some Foo.
  9. Now, I am printing some Bar2.
  10. This should print a capital 'A': A

PHP Manual:文字列 変数のパース
これを読んでも、「簡単」と「複雑」の定義がはっきりしないので
全て {}(波括弧、中括弧)を付けるほうが安全かも?

定数や関数

定数や関数は $(ドル)から始まらないので、処理不能・・・?

最初に Google 先生に質問したら、
「定数や関数は使えない」という回答ばっかり引っかかってきたけど
2回目の質問では、アッサリと解決策が。
Blog:PHPのヒアドキュメント内で定数や関数を動かす
Web、ときどきDTP。(うぇヴ(web)屋のネタ帳。):PHPのヒアドキュメント内で関数を使う。計算もしたい。

クラス

クラスを用意して、そのメンバ変数やメソッドとして利用する。

可変変数

定数は、そのまま変数にしてしまえばよい。
関数は、可変変数を用いて処理。

利用

直接出力しても

  1. echo &lt;&lt;&lt;EOD
  2. hogehoge
  3. EOD;

変数に代入してもよい。

  1. $foo = &lt;&lt;&lt;EOD
  2. hogehoge
  3. EOD;
Nowdoc

PHP 5.3.0 以降の機能。

ヒアドキュメントはダブルクォーテーションで括られた文字列として扱われるのに対して
Nowdoc は、シングルクォーテーションで括られた文字列として扱われる。

中身について、パース処理を行わないので、エスケープをする必要がなくなる。
SGML の

書式

開始 ID を、シングルクォーテーションで括る。

  1. &lt;&lt;&lt;'EOD'
  2. hogehoge
  3. EOD
  1. echo <<<'EOT'
  2. My name is "$name". I am printing some $foo->foo.
  3. Now, I am printing some {$foo->bar[1]}.
  4. This should not print a capital 'A': \x41
  5. EOT;
  6.  
  7. // 出力結果
  8. My name is "$name". I am printing some $foo->foo.
  9. Now, I am printing some {$foo->bar[1]}.
  10. This should not print a capital 'A': \x41
参考サイト

すたら日記:PHP ヒアドキュメントの使い方:2通り

Posted by muchag | PHP |
初回投稿:2016-01-16 (土) 10:53:42 | 最終更新:2016-01-16 (土) 12:14:27

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment