PHPのヒアドキュメント内で連想配列を展開する方法

こんにちは!ぐちです。

ヒアドキュメント

PHPでは文字列を出力する場合にechoprintを使うことが多いと思います。シンプルな文字列であれば事足りると思いますがHTMLを出力するような場合、下記のような記述をよく見かけます。

echo '<div class="hoge">';
echo '<span class="label">'.$labelName.'</span>';
echo '</div>';

ちょっと極端な例ですがよく見かけますよね。可読性なんてあったもんではありません。泣

そこで登場するのがヒアドキュメントという仕組みです。<<<という記号の識別子(任意の文字列)を書いて、出力したい文字列を記述したあと最後に始まりと同じ識別子をセミコロン(;)と合わせて記述します。そうすることで識別子から識別子までの文字列を改行も含めてそのまま文字列として扱うことが可能です。

下記の例ではechoを使って文字列として表示しています。変数を書いても自動で展開されます。

echo <<<EOT
<div class="hoge">
<span class="label">$labelName</span>
</div>
EOT;

ここで注意点があります。

  • 開始の識別子と終了の識別子は同じ文字列であること
  • <<<と開始の識別子の間には半角スペースも含めないこと
  • 終了の識別子は行頭に記述し行末はセミコロンで終了すること

連想配列を展開するには

上記の例で$labelNameの部分が連想配列だったら下記のようになりますよね。

echo <<<EOT
<div class="hoge">
<span class="label">$hoge['labelName']</span>
</div>
EOT;

ただし、これでは適切に文字列として展開されません。連想配列を展開したい場合は下記のように{}で変数全体を括る必要があります。

echo <<<EOT
<div class="hoge">
<span class="label">{$hoge['labelName']}</span>
</div>
EOT;

これで文字列との連結やechoが多数並んだりせず可読性を維持したまま変数を含めた文字列が展開されます。
様々なオプションがありますがその辺はまたの機会にご紹介したいと思います。

では今回はこの辺で。