2019-06-17

PHPヒアドキュメント構文で文字列を表示する

PHPに関する記事

PHPの文字列リテラルの一つ、ヒアドキュメントについて解説します。

ヒアドキュメントは文字列を変数に代入したり、出力する場合に使用します。文字列を引用符で囲んで表示する場合とは何が違うのでしょうか。
単純で短めの文字列であればヒアドキュメントを使わなくても特に支障はなく、使うシーンは多くはないでしょう。しかし、HTMLファイルや、改行をいくつも含むような長めの文章を、PHPで生成し出力するといった場合には便利な方法となりますので覚えておきましょう。

ヒアドキュメントの基本

<<<のあとに開始文字列をつなぎ(スペースなし)、最後にも同じ文字列(終端文字列)を記入します。

<<<開始文字列
文字列
終端文字列;

文字列を挟む、開始文字列と終端文字列のルール

  • 開始文字列と終端文字列は同じ値を使用する
  • 開始文字列と終端文字列はアルファベットの大文字、小文字、日本語でも使用可(基本はアルファベット大文字)
  • 記号はアンダースコアのみ使用可
  • 数字を先頭にしてはいけない

よく見かけるのはEOT、EOM、EOF、EODなどですが、任意で指定可能です。EOTはEnd Of Text、EOMはEnd Of Message、EOFはEnd Of File、EODはEnd Of Document略らしいです。

ヒアドキュメントの例

<?php
// echoで出力
echo <<<EOT
ヒアドキュメントで、<br>
テキストを出力します。
EOT;

// 変数に代入したあとで出力
$str = <<<EOT
ヒアドキュメントで、<br>
テキストを変数に代入し<br>
最後に出力します。
EOT;

echo $str;

上記のサンプルはこのように出力されます。

ヒアドキュメントで、
テキストを出力します。

ヒアドキュメントで、
テキストを変数に代入し
最後に出力します。

構文内で変数を使用する

<?php
// 変数を展開することも可能
$foo = "変数";
echo <<<EOT
ヒアドキュメントで、<br>
{$foo}を出力します。
EOT;
ヒアドキュメントで、
変数を出力します。

スポンサーリンク

やりがちなエラー

  • 終端文字列の後に改行がない
  • 開始文字列の後に文字列がある
  • 終端文字列の前後に文字列がある

終端文字列の後に改行がない

終端文字列の直後に改行を入れないとエラーになります。閉じタグ等の前に改行を入れましょう。

<?php
echo <<<EOT
ヒアドキュメントで出力します。
EOT;?>

開始文字列の後に文字列がある

開始文字列の後に、改行以外の文字を入れるとエラーになります。空白やコメントを含みます。

<?php
echo <<<EOT // 空白とコメントがあるのでエラー
ヒアドキュメントで出力します。
EOT;

終端文字列の前後に文字列がある

終端文字列の前後に空白やインデントや文字を入れるとエラーになります。

<?php
echo <<<EOT
ヒアドキュメントで出力します。
  EOT; // 前に空白、後にコメントがあるのでエラー

まとめ

PHPを使い始めた頃は、お問合せフォームの作成などで多用していましたが、最近は使用した記憶がありません。
テンプレートエンジンやフレームワークの復旧も関係しているのではないでしょうか。
しかし、古いスクリプトの改修等で目にする機会があるかもしれませんので、基本的な部分は抑えておきましょう。