PHPで文字列を変数に代入しようとするときや、echoで文字列を表示しようとするとき、基本的には一行ずつ代入していきます。しかし、何行にもわたる文章を扱いたい場合もあります。そのときに、何度もechoを行ったり、変数に連結したりするのでは不便です。
そこでプログラム中に複数行の文字列を直接かける仕組みとしてヒアドキュメントがあります。
ヒアドキュメントの基本
例えば以下の3行を1つの変数に入れたいとします。
1 2 3 |
これは1行目です<br> これは2行目です<br> これは3行目です<br> |
このとき、こう書くことができます。
1 2 3 4 5 |
$data = <<<EOT これは1行目です<br> これは2行目です<br> これは3行目です<br> EOT; |
<<<EOT というのは EOT が現れるまでを1つの文字列と見なす、という意味です。
そのため、次の行から EOT; までが一つの文字列となります。
EOTというのは識別子で、好きな名前を付けることができます。
ヒアドキュメント内の変数展開
ヒアドキュメント内では文字列をダブルクォーテーション("")で囲んだときと同様に変数を展開します。
1 2 3 4 5 6 7 8 9 |
$num = 1; $data = <<<EOT これは{$num}行目です<br> これは2行目です<br> これは3行目です<br> EOT; echo $data; |
このとき、以下のように表示されます。
1 2 3 |
これは1行目です これは2行目です これは3行目です |
ヒアドキュメント内の変数展開を行わない方法
通常はヒアドキュメント内では変数展開が行われますが、それを行わせたくないときがあります。文字列の場合、シングルクォーテーション('')で囲めばいいわけですが、ヒアドキュメントの場合、以下のように行います。
1 2 3 4 5 |
$data = <<<'EOT' これは{$num}行目です<br> これは2行目です<br> これは3行目です<br> EOT; |
このように識別子をシングルクォーテーション('')で囲みます。
このとき、以下のように表示されます。
1 2 3 |
これは{$num}行目です これは2行目です これは3行目です |
まとめ
HTMLの場合、複数行を表示したいことはよくあります。大量の行を表示したい場合などにヒアドキュメントは便利ですので覚えておきましょう。文字列を多数連結するような場面ではヒアドキュメントが使えないか、思い出すようにしてください。