PHPのヒアドキュメントの使い方と注意点

HTMLにPHPスクリプトを埋め込むにはPHPの開始タグと終了タグ内にPHPスクリプトを書いていきますが、その中でPHPのヒアドキュメントを利用したコードを書いていくこともあります。

ヒアドキュメントとは、何行にも渡る長い文章やソースコード、他にも変数に長い文字列を格納して出力を行いたい場合に利用すると便利な記述方法です。例えば、PHPスクリプト内でHTMLタグのコードを出力する場合は「echo」や「print」などの表示するための命令を
使って出力していきますが、ヒアドキュメントを利用することでHTMLを改行を含めながら普段どおりに記述することができます。

どちらで記述していくかは自分の書きやすい方でいいですが、ヒアドキュメントの書き方ではちょっとした記述ミスからエラーが発生してしまいます。

ここではPHPのヒアドキュメントの使い方と注意点についてお話していきます。


PHPのヒアドキュメントの利用


まずは基本的なヒアドキュメントの記述方法になります。
HTML内にヒアドキュメントを利用したPHPスクリプトを書いてみます。

2通りの記述方法があります。
まずは変数を扱った方法です。

<body>

  <header>
  </header>

  <main>

    <?php

    $str = <<<eot
    <h1>Sample eot</h1>
    <p>Example text... Example text...</p>
eot;

    print $str;

    ?>

  </main>

  <footer>
  </footer>

</body>


変数「str」にヒアドキュメントを利用してHTMLコードを格納。最後にprintで変数を展開して表示させます。
変数で扱う場合は普段どおりに変数に対して「=(イコール)」で代入します。「<<<」がヒアドキュメントの合図でその後にヒアドキュメントの名前をつけます。よく使われる名前として「eot(End Of Text)」や「eod(End Of Document)」などが使われます。名前は特に決まりはなくわかりやすい名前にするのが一般的です。ヒアドキュメントの終わりには終了の合図として終了識別子を「eot;」のようにセミコロンで終わりとします。

ヒアドキュメントの開始の合図と終了の合図は大文字と小文字は区別されますので、開始の合図が大文字で終了の合図が小文字だとエラーとなります。

また、そのまま「echo」や「print」などの出力する命令でもヒアドキュメントを利用できます。

<body>

  <header>
  </header>

  <main>

    <?php

    print <<< eot2
    <h2>Sample eot2</h2>
    <p>Example text... Example text...</p>
eot2;

    ?>

  </main>

  <footer>
  </footer>

</body>


普通に出力する命令でとしてechoやprintを使うだけでそのまま出力できます。ただ出力するだけであればこちらのほうがシンプルですが、もし後で変数に格納したものを利用していくことがあるのであれば変数として扱っていくと良いでしょう。


PHPのヒアドキュメントを利用してコードを書いていくと予期せぬエラーに遭遇します。
そのエラーの多くがヒアドキュメントの終わりを意味する終了識別子の記述にあります。なかなか気づきにくい部分です。

エラーが発生する例

<body>

  <header>
  </header>

  <main>

    <?php

    $str = <<<eot
    <h1>Sample eot</h1>
    <p>Example text... Example text...</p>
    eot;

    print $str;

    ?>

  </main>

  <footer>
  </footer>

</body>


普通にHTML内にPHPスクリプトを記述していく中で、ソースコードを見やすくするためインデントや半角スペースを利用してコードを書いていきます。しかし、ヒアドキュメントの終了識別子の行にインデントや半角スペースが入っているとエラーが発生します。サンプルコードの13行目の部分です。これはPHPのリファレンスにも掲載されていますが見逃しがちな注意点です。
HTMLをインデントや半角スペースを使って見やすくコードを書いていくことは大切なことなのでそのままPHPスクリプトも記述していくわけですが、HTML内にヒアドキュメントを利用してPHPを埋め込むときは終了識別子の行にインデントや半角スペースを入れないように注意しましょう。


PHPのヒアドキュメントの基本的な書き方から意外と見落としがちな注意点を説明してきました。
使い方によっては大変便利な機能ですので覚えておくと良いでしょう。