ヒアドキュメント構文とNowdoc構文は似てるんですけど、どちらも簡単に言えば長い文章の文字列を扱うときに便利です。
手紙のような長い文章だけでなく、HTMLをPHPの文字列として記述して後に出力するときにも使えます。
とは言ってもぶっちゃけ僕は全然使いません。
使っているところを見ることもほとんどありません。
でも、見かけたときに「なんだこれ?」ってなるので知ってはおきましょう。
ヒアドキュメント構文
ヒアドキュメントを使う目的
先にもお伝えしましたが、長い文字列を扱うときに便利です。
特にHTMLを出力するときに便利かなと思います。
何故かと言うと、”(ダブルコーテーション) や ‘(シングルコーテーション)をエスケープせずにそのまま書けるためです。
HTMLタグ内には ” や ‘ がたくさん出てくるのでそれをいちいちエスケープするのは面倒です。
ヒアドキュメントの書き方
1 2 3 4 5 |
$name = "近松"; $str = <<<EOD こんにちは。{$name}です。 "りんご"はアレルギーで食べれません。 EOD; |
文字列
識別子;
といった形になります。
識別子はEODと書きましたが End Of Document の略です。
他にもEOT(End Of Text)、EOF(End Of File)、ENDなどがあります。
と言ってもAでもBでもzなどの小文字でもいいです。>>>の後に書かれる識別子と最後の ; の前に書かれる識別子が同じならばいいです。
ただ、a とかだと文中に現れる可能性があるので使わないのが無難です。
ヒアドキュメントは文中に変数も入れれる
これもヒアドキュメントのメリットの一つでしょう。
上のサンプルの {$name} のように文中に変数を入れることが出来ます。
ただ、これは普通の文字列も同じです。
{ } は無くても問題ないですが、後にスペースを入れるなどしないと文字と変数の境目が分からないため { } をつけて変数を差し込むのが無難です。
Nowdoc構文
Nowdoc構文はヒアドキュメントとほぼほぼ同じです。
1 2 3 4 5 |
$name = "近松"; $str = <<<'EOT' こんにちは。{$name}です。 "りんご"はアレルギーで食べれません。 EOT; |
<<<の後に書く識別子を ‘(シングルコーテーション)で囲むだけです。
違いは、文中に変数を代入できないことです。
上のコードを出力すると、
1 2 |
こんにちは。{$name}です。 "りんご"はアレルギーで食べれません。 |
のように {$name} がそのまま出力されてしまいます。
これ以外は確かヒアドキュメントとの違いはないです。
まとめ
ヒアドキュメント構文とNowdoc構文は長い文字列を扱うときに使います。
文中に”や’をそのまま書いてエスケープしなくてもそのまま使えます。
HTML文をPHP内で書くときに便利です。
でも、あまり使わないです・・・
コメントを残す