#1-8 複数行のテキストを表示しよう – ヒアドキュメント、Nowdoc

前のレッスンで、エスケープシーケンスを使って複数行のテキストを出力しました。しかし、もっと大量の文章を出力したい場合などは、\nを埋め込む作業も大変です。このような場合に「ヒアドキュメント」や「Nowdoc」が利用できます。次のプログラムを作ってみましょう。

<?php
echo <<< EOT
吾輩は猫である。
名前はまだ無い。
どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
EOT;

すると、画面にはそのまま表示されます。「<<<」と記述した後で、なにかキーワードとなる文字列(これを終端IDといいます)を入れると、そのキーワードが登場するまでのテキストをそのまま画面に出力します。

終端IDは、大文字で記述するのが一般的で「End Of Text」の略称で「EOT」というキーワードがよく使われます。とはいえ、その他のものでも見分けがつけば良く、英数字またはアンダースコアで命名します。また、終端IDは行の先頭に記述する必要があります。次のようにするとエラーになります。

<?php
echo <<< EOT
吾輩わがはいは猫である。
名前はまだ無い。
どこで生れたかとんと見当けんとうがつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
  EOT;

Nowdoc

ヒアドキュメントは、ダブルクオーテーションで指定したパラメーターと同じ動きをします。例えば、次のようにエスケープシーケンスの改行記号を入れると、そのまま改行されます。

<?php
echo <<< EOT
吾輩わがはいは猫である。\n
名前はまだ無い。
どこで生れたかとんと見当けんとうがつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
EOT;

この時、終端IDの指定をシングルクオーテーションで囲むと動きが変化します。

<?php
echo <<< 'EOT'
吾輩わがはいは猫である。\n
名前はまだ無い。
どこで生れたかとんと見当けんとうがつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
EOT;

この場合、「\n」はそのまま画面に出力されます。つまり、シングルクオーテーションと同じ動きになります。またこれを特別に「Nowdoc」と呼び、ヒアドキュメントと区別されています。

なお、ヒアドキュメントは分かりやすくするように、ダブルクオーテーションで囲むこともできます。

<?php
echo <<< "EOT"
吾輩わがはいは猫である。\n
名前はまだ無い。
どこで生れたかとんと見当けんとうがつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
EOT;

ただし、この場合は省略するのが一般的です。

この記事を書いた人

たにぐち まこと

『よくわかるPHPの教科書』や『マンガでマスター プログラミング教室』の著者。 ともすた合同会社で、プログラミング教育やこども向けの講座などを Udemyや YouTubeで展開しています。