【PHP入門】複数行で書ける!ヒアドキュメントの使い方(<<<)

こんにちはエンジニアのオータケです。

今回は「ヒアドキュメント」について解説します。

ヒアドキュメント・・・
聞いたことありますか?

ヒアドキュメントは変数に複数行に渡って文字列を代入する際に便利な仕組みです。

この記事を見れば、

・ヒアドキュメントの基本的な使い方
・ヒアドキュメントの種類とルール

がわかり、他にも

・ヒアドキュメントを使う上での注意点

を知ることができます。

では早速解説していきます!

目次

ヒアドキュメントとは?

難しいことは考えずまず使ってみる

冒頭、ヒアドキュメントは変数に複数行に渡って文字列を代入する際に便利なと解説しました。

まずは詳しいことがわからなくても大丈夫です。

使ってみましょう。

<?php
$str = <<< EOM
Message だよ!
EOM;

echo $str;
?>

実行結果:

Message だよ!

まず一行目の変数$strに何かを代入しようとしていることがわかります。

<<< EOM

これですね。

これがヒアドキュメントになります。
EOMと書かれた場所からEOM;と書かれた場所の内容を変数$strに代入しています。

今回の場合で言えばEOMからEOM;までの間というのは「Message だよ!」になります。

そして表示してみると実行結果通り、Messageだよ!が表示されてますね。

<<<やEOMってよくわからないですよね?

次の項でヒアドキュメントを使う際のルールについて解説を行います。

ヒアドキュメントのルール

ヒアドキュメントを使うためには一定のルールがあります。

まず、ヒアドキュメントを使う際には「<<<」「=」のあとに付けて使います。
そして「<<<」のあとにはIDというものを書く必要があります。

前項のサンプルではEOMがIDにあたります。

IDはプログラマが決められたルール内であれば自由につけることができます。

ルールについては公式ドキュメント内にこうあります。
参照元:PHP:文字列

つまり、英数字およびアンダースコアのみを含み、 数字でない文字またはアンダースコアで始まる必要があります。

このルール通りでない場合使えないので注意しましょう。

ではなぜ今回のIDがEOMなのでしょうか?

EOMはEndOfMessageの略称とされており文字列の最後という意味合いで使っています。

これでヒアドキュメントの基本的な使い方は終わりです!
実はヒアドキュメントには種類があり、その使い方によって動作が変わってくるため次の章もみて学んでいきましょう!

ヒアドキュメントの種類

ダブルクォート

まずサンプルを見てみましょう。

<?php
$number = 1;
$str = <<< "EOM"
値は$number
EOM;

echo $str;
?>

実行結果:

値は1

今回のサンプルでは前章のサンプルと大きく2箇所違います。

1箇所目は$numberという変数を用意してヒアドキュメント内にその変数を使っている点です。

まずヒアドキュメントでは、はじめのIDからおわりのIDの間に変数を埋め込むことができます。
今回のサンプルのように埋め込まれた変数は展開され1として表示されます。

2箇所目はIDであるEOMの両端にダブルクォートがついている点です。

先程のサンプルとは大きく変わりません。
ただ、このダブルクォートを付ける方法はPHPのバージョンが5.3以降である必要があります。

なぜダブルクォートをつけるのでしょうか?
このあとのNowdocについての解説を見ていくことでなんとなくわかっていただけるのではないかと思います。

シングルクォート(Nowdoc)

先程はダブルクォートをIDの両端につけていました。
今度は、IDの両端にシングルクォートをつけてみましょう。

<?php
$number = 1;
$str = <<< 'EOM'
値は$number
EOM;

echo $str;
?>

実行結果:

値は$number

先ほどと実行結果が違うのがわかります。
つまり、シングルクォートでIDを囲った場合では文字列の中に変数名が含まれていても展開されずそのままの文字列として扱われます。

なにか気づきませんか?

そうです。
単行で変数に代入するときも同じルールですよね?

次のサンプルを見てみましょう。

<?php
$number = 1;
$str = "値は$number";
echo $str;

echo "\n";

$str = '値は$number';
echo $str;
?>

実行結果:

値は1
値は$number

これはヒアドキュメントを使わずに書いた例ですが実行結果はヒアドキュメントを使った例と同じです。

変数を値として展開したい場合はダブルクォートを使い、展開したくない場合はシングルクォートを使うようにしましょう!

こちらもPHPのバージョンが5.3以降であることが必須であるため注意してください。

ヒアドキュメントを使う上での注意点

ヒアドキュメントの中身をコメントアウト

ヒアドキュメントを使っていて困る点が一つあります。
それはコメントアウトです。

複数行に渡って文字が書いてあるどこか1行をコメントアウトしたいとなった場合でもコメントアウトすることができません。

例えば、

<?php
$number = 1;
$str = <<< EOM
あ
//り
が
と
う
EOM;

echo $str;
?>

このようにして実行しても

あ
//り
が
と
う

このようにコメントアウトの「//」まで表示されてしまいます。

そのため使う際には注意が必要です。

使い方次第でバグの元?

ヒアドキュメントを使う際にもう一つ問題点があります。

使い方次第でバグを生み出すもとになってしまう可能性があるということです。

今回のサンプルでは数行のヒアドキュメントでしたが数十行、数百行と長いようなヒアドキュメントになった場合、ヒアドキュメントの始端と終端の行がわかりづらくなります。

先程のようにコメントアウトしてもヒアドキュメント内の行であればコメントアウトされてない状態など不具合を生み出す可能性があります。

そのため、実際にヒアドキュメントが使われる場所は限定されています。

まとめ

いかがだったでしょうか?

今回はヒアドキュメントについて解説しました。

使い方を覚えるのは難しくないですが、使い所は難しいと思います。

不具合を生み出さないような書き方、使い方が必要ですね。

この記事を書いた人

30歳、フリーランスプログラマ。中学の頃よりプログラミングに興味を持ちゲーム開発やWebサイト構築などを経験
新しいフレームワークやライブラリに興味があり革新的な機能が含まれていると泣いて喜ぶ。

目次