B120 ヒアドキュメント / Nowdoc

ヒアドキュメント / Nowdocとは複数行のテキストをそのまま変数に入れて出力する際に用いる構文です。似ている構文ですが違いもあるので、比較しながら2つの構文について紹介します。

ヒアドキュメント / Nowdocとは

ヒアドキュメントとは

文字列を変数に代入、または出力するために用います。主に長い文字列の代入・出力のために利用するケースが多いです。エンドトークン(<<<終了の文字列)を記号で囲む必要がなく、変数展開も可能です。

記載構文

PHP
<?php
  $変数 = <<<終了の文字列
 
  「文字列を記述」
 
  終了の文字列;
?>

記載例

PHP
<?php
  $text = 'こんにちは';
  $content = <<< EOM
  ここに長いテキストを入力します。
  変数も表示することができます。
  {$text}
  EOM;
  echo $content;
?>

出力結果

PHP
ここに長いテキストを入力します。
変数も表示することができます。
こんにちは

出力結果(ブラウザイメージ)

ブラウザ上で改行させる場合はHTMLタグが必要となります。改行させたい箇所に<br>を追加してください。
PHPの nl2br() 関数を使うことで、改行コードを自動で<br>タグに変換することもできます。

PHP
<?php
  $text = 'こんにちは';
  $content = <<< EOM
  ここに長いテキストを入力します。
  変数も表示することができます。
  {$text}
  EOM;
  echo nl2br($content);
?>

出力結果(ブラウザイメージ)

Nowdocとは

先ほどとは異なり、エンドトークン(<<<終了の文字列)をシングルクォート ‘ 、あるいはダブルクォート ” で囲みます。
使い方、使う場面はヒアドキュメントとほぼ同じですが、シングルクォート ‘ で囲んだ場合は変数展開が不可能となります。

記載構文

PHP
<?php
  $変数 = <<<'終了の文字列'
 
  「文字列を記述」
 
  終了の文字列;
?>

記載例

PHP
<?php
  $text = 'こんにちは';
  $content = <<< 'EOM'
  ここに長いテキストを入力します。
  変数も表示することができます。
  {$text}
  EOM;
  echo $content;
?>

出力結果

PHP
ここに長いテキストを入力します。
変数も表示することができます。
{$text}

エンジニアからのアドバイス

ヒアドキュメントを用いれば長い文字列の代入・出力ができます。
ただし、ヒアドキュメント及びNowdocの内容はコメントアウトすることができない(//はそのまま文字列として表示される)という特徴があります。
使用する際は注意しましょう。

ヒアドキュメントは “” で囲んだ文字列として扱われ、Nowdocは ” で囲んだ文字列として扱われます。
※PHPでは “”で囲むと変数が展開され、”で囲むと変数が展開されず、すべて文字列のまま表示されるというルールがあります。
ヒアドキュメントの構文はややこしいように見えますが、動作自体は実にシンプルです。

---