[PHP] 変数を展開しないヒアドキュメント「Nowdoc」

公開

スポンサーリンク

PHP 5.3.0以降、ヒアドキュメントとほぼ同じ機能で、文字列中の変数の展開を行わない「Nowdoc」が使えるようになっています。Here Documentに対しNow Documentです。

Nowdocを使う目的

ヒアドキュメントは長い文章などをプログラム中に記述する際に大変便利ですが、文章中の変数を展開したくない場合にはエスケープなどが必要で、その点が面倒でした。Nowdocは文字列中の変数を展開しません。

例えば以下のように、文章中に$を使う場合、従来のヒアドキュメントでは以下のようにエスケープの必要がありました。

$str = <<< EOD
  変数\$valを云々…
EOD

Nowdocではエスケープの必要がなくなっています。

$str = <<< 'EOD'
  変数$valを云々…
EOD

ヒアドキュメントがダブルクオートで文字列を囲んだものだとすれば、Nowdocはシングルクオートで囲んだ文字列にあたるわけです。

使い方

使い方はヒアドキュメントとほぼ同じですが、識別子をシングルクオートで囲む点が異なります。

ヒアドキュメント
$variable = '変数は展開される。';
$str = <<< EOD
  これがヒアドキュメントの使い方。
  識別子は囲まない。
  $variable
EOD;
Nowdoc
$str = <<< 'EOD'
  これがNowdocの使い方。
  識別子は囲まない。
  変数$variableは展開されずそのまま表示される。
EOD;

なお、Nowdocの実装に伴い、ヒアドキュメントの識別子もダブルクオートで囲めるように変更されています。

$str = <<< "EOD"
  ヒアドキュメントもPHP 5.3.0以降は識別子をダブルクオートで囲めるようになった。
EOD;

注意点

終了識別子は囲まない

Nowdocは、識別子はシングルクオートで囲みますが、終了識別子は囲みません。囲むと終了識別子ではなく文字列と認識されてしまいエラーになります。

$str = <<< 'EOD'
  終了識別子はクオートで囲んではいけない
'EOD';// 間違い!!

PHP実行環境に注意

NowdocはPHP 5.3.0以降のバージョンで実装された機能です。まだ5.2.x以前のバージョンを使っているサーバーは多いでしょうから、使用には注意が必要です。

スポンサーリンク


Comment