PHPの中でEOFを見かけたら、それはヒアドキュメントかもしれません。ヒアドキュメントはプログラムの中にまるでテキストファイルをそのまま貼り付けたように使える便利な機能です。
では、なぜヒアドキュメントにEOFが使われるのでしょうか。今回は、なぜEOFが使われるかも含めて、ヒアドキュメントの使い方を解説します。
目次
ヒアドキュメントとは何か
ヒアドキュメントは、プログラムの中で長い文字列を使う場合によく使われる便利な機能で、PHPに限らず多くのプログラミング言語で利用できます。とはいえ、ヒアドキュメントの使い方がよく分らない、という方もいるでしょう。
まずは、ヒアドキュメントについて解説します。
ヒアドキュメントの基本
ヒアドキュメントは、改行やタブなどの特殊な文字コードを含む文字列をプログラムのソースコードに埋め込む機能です。Linux系OSでよく使われるbashなどによるシェルスクリプトやPHPのようなスクリプト言語などで使用可能です。
なおプログラム言語のほとんどは、文字列を使用する際に改行やタブが直接記述できません。バックスラッシュなどを利用した特殊な文字コードを使用するのが一般的です。
しかし、ヒアドキュメントではテキストエディタに書いたような文章をそのままプログラム内で利用できるので、人が読んで分かりやすいプログラムを実現できるのです。
ヒアドキュメントの使い方
改行を含む長い文章をプログラムに埋め込むのに便利なヒアドキュメントですが、使い方は難しくありません。開始の文字列と終了の文字列の間に長い文章を記述するだけ。
なおヒアドキュメント開始の文字列は、「<<」や「<<<」などに終了の文字列を付けた文字列でプログラム言語によって異なります。そして、終了の文字列には、利用するプログラムの命令や関数名は使えません。
また、終了文字はプログラムの中でテキストの終了として分かりやすい文字が使われますが、その代表が「EOD」「EOM」「EOF」です。
EOFの意味はEnd of File
先ほど、ヒアドキュメントの終了文字として「EOD」「EOM」「EOF」がよく使われると説明しましたが、おすすめは「EOF」です。
EOFとは「End of File」の略で、ファイルの終わりという意味の略称です。そのため、テキストファイルから読み込む代わりに、ヒアドキュメントでプログラム内に埋め込んだ文字列はここまで、という意味で使えます。
なお、他の終了文字の「EOD」はEnd of Documentの略、「EOM」はEnd of Messageです。また、PHPのヒアドキュメントに使われる終了文字は文字列であれば何でもいいので、ほかの独自の文字列を使っても構いません。
PHPのヒアドキュメントの基本
WebページのHTMLなどテキストを扱うことの多いPHPは、ヒアドキュメントをよく利用するプログラム言語です。では、具体的にPHPではどのようにヒアドキュメントを使うのでしょうか。
次からPHPのヒアドキュメントの基本について、終了文字にEOFを使った例で紹介します。
PHPのヒアドキュメントの文法
PHPでヒアドキュメントを定義する場合、開始文字列として「<<<」と終了の文字列を使います。また、ヒアドキュメントとして指定したテキストの最後の行をさらに改行して終了文字列を指定してください。
なお終了文字列は必ず左端から書いてください。文章の途中に書いてもそこで終わることはありません。PHPのヒアドキュメントの文法は、次のとおりです。
1 2 3 4 5 |
$変数 = <<<終了の文字列 (ヒアドキュメントとして指定する文字列) 終了の文字列; |
基本的なヒアドキュメントの例
1 2 3 4 5 6 7 8 9 10 |
<?php $message = <<<EOF ここからヒアドキュメントです。 開始文字列は<<<EOFです。 終了文字列はEOFです。 サンプルはここまです。 EOF; echo $message; ?> |
ヒアドキュメントの中で特殊文字が使える
ヒアドキュメントの中では、PHPの文字列としてそのまま使えない改行やタブなどの特殊文字が使えます。さらに、文字列を囲むシングルクオートやダブルクオートもそのまま利用可能です。
特殊文字を含むヒアドキュメントを使った例
1 2 3 4 5 6 7 8 9 10 11 |
<?php $message = <<<EOF これはメッセージのサンプルです。 タブが使えます。 改行が使えます。 ''も""が使えます。 サンプルはここまです。 EOF; echo $message; ?> |
ヒアドキュメントの中で変数が使える
PHPのヒアドキュメントは、終了文字で囲んだ文字列の中に変数を埋め込むことが可能です。ただし、変数とヒアドキュメントの文字列とを区別する必要があるので注意してください。
よく使われるのは変数を{}で囲んで文字と区別する方法です。場合によっては、半角スペースで他の文字から分離して利用することもできます。
1 2 3 4 5 6 7 8 9 |
<?php $name = "PHPer"; $messge = <<<EOF 私の名前は{$name}です。 よろしくお願いします。 EOF echo $message; ?> |
上の例を実行すると、次のように表示されます。
1 2 |
私の名前はPHPerです。 よろしくお願いします。 |
もしヒアドキュメントの変数を{}で囲わずに「私の名前は$nameです。」と書いてしまうと、「$nameです。」という変数は宣言されていない、といったエラーが発生します。変数を区別できるように{}で囲って「私の名前は{$name}です。」としてください。
長い文字列をPHPのプログラムで合成する場合、ヒアドキュメントを利用することで、幾つもの文字列を連結するよりも見やすいプログラムが書けます。そして、HTMLのパーツを合成したり、SQLを合成する場合など、いろいろなケースで利用可能です。
EOFをヒアドキュメントで使う場合の注意点
これまで紹介したようにヒアドキュメントはPHPのプログラムの中で長い文字列を使う場合に便利な機能です。しかし正しく使わないと便利な機能は利用できません。
次にヒアドキュメントで使う際、特に注意してほしい2つのポイントを紹介します。
EOFの後ろに;を忘れずに
ヒアドキュメントを使う場合、よく忘れがちなのが終了文字の後ろに付ける「;」です。PHPのステートメントの終了を意味する「;」を、終了文字の後ろに付け忘れないようにしましょう。
終了文字EOFがエラーになる書き方
1 2 3 4 5 6 7 8 |
<?php $message = <<<EOF ここからヒアドキュメントです。 サンプルはここまです。 EOF echo $message; ?> |
この例は、終了文字EOFの後ろに「;」がありません。そのため、EOFの次の「echo $messaeg」で文法エラーがあると表示されます。
EOFを左端に
ヒアドキュメントは、プログラムの中にまるでテキストファイルの内容をそのまま貼り付けて利用する便利な方法です。そして終了文字にEOFを使う理由は、張り付けたテキストファイルの終了位置を示す文字ということが理由です。
もし、終了文字の左側に半角スペースやタブを入れてしまうと終了文字になりません。終了文字のEOFはテキストファイルの最後の行を示す文字なので、必ず左端に記入してください。
PHPでエラーになるEOFの使い方
1 2 3 4 5 6 7 |
<?php $message = <<<EOF ここからヒアドキュメントです。 サンプルはここまです。 EOF; echo $message; ?> |
この例では、PHPのプログラムを見やすくするため半角スペースを使ってインデントしています。しかし、ヒアドキュメントもインデントしてしまっていますが、EOFの左側に半角スペースが入っているので、エラーが発生します。
ヒアドキュメントの文字列と終了文字は、インデントの対象にはしないでください。
正しいEOFの使い方の例
1 2 3 4 5 6 7 8 |
<?php $message = <<<EOF ここからヒアドキュメントです。 サンプルはここまです。 EOF; echo $message; ?> |
まとめ
終了文字にEOFを使うPHPのヒアドキュメントの使い方について説明しました。しかし、終了文字はEOF以外の、EOMやEOTなどもよく使われます。
さらにアルファベットの文字列でなければならない、といったルールもないので、日本語の「終了」を終了文字として使うことも可能です。
とはいえEOFはEnd of Fileの略で、テキストファイルをそのまま貼り付けたヒアドキュメントの終了位置を示す記号としてピッタリです。ぜひ、PHPのプログラム内でヒアドキュメントと一緒に使ってみてください。