PHPのヒアドキュメント内で変数をエスケープする2つの方法

PHPのヒアドキュメント内で変数名そのものを展開せずに表示したい場合、

ドキュメント内で変数名をエスケープすることで変数名自体の表示が可能です。

そのエスケープ方法には2つあるので、そのやり方についてまとめました。

ヒアドキュメントでは変数は勝手に展開されてしまう

ヒアドキュメントはPHPで長い文字列を表示するのに便利な構文

この中で $  から始まる変数を書くことで、その内容を展開することができます。

また次で紹介したようにクラス変数や関数・式なんかを展開することも可能

 

ただこの展開機能は変数名自体を表示したいときに少し厄介ですよね。

例えば次のコードのような場合

これを実行すると次のように変数の内容が出力されてしまいます。

なので変数名自体を表示したい場合、エスケープが必要です。

ヒアドキュメント内で変数をエスケープする方法

そのエスケープする方法というのが次の2つ

  • バックスラッシュでエスケープ
  • nowdocを使ってエスケープ

この2つのやり方については次の通り

バックスラッシュでエスケープ

まず1つめの方法はバックスラッシュ \  でエスケープする方法

ヒアドキュメント内で使えない $  や \  などの記号がエスケープできます。

 

例えば次が変数名をエスケープしているコード例

\$foo  や \$bar  のように変数名の前に \  を置くだけです。

そしてこのように書けば次の期待通りの出力になります。

ちなみに \  自体をエスケープするなら \\  のように2つ重ねてあげればOK

Nowdocでエスケープする

もう1つの方法はPHP5.3.0以降で使えるようになったNowdocを使う方法

NowdocについてはPHPマニュアルで次のように説明されていました。

Nowdoc はヒアドキュメントと似ていますが、 ヒアドキュメントがダブルクォートで囲んだ文字列として扱われるのに対して、 Nowdoc はシングルクォートで囲んだ文字列として扱われます。 Nowdoc の使用方法はヒアドキュメントとほぼ同じですが、 その中身について パース処理を行いません

PHP: 文字列 - Manualより引用

Nowdocを使うとシングルクォートで囲んだように扱われるようです。

なので $hoge  のように変数名を書いても展開される心配がありません。

 

Nowdocの書き方は <<<  の後に続く識別子をシングルクォートで囲むだけ

例えば <<<EOM  だったところを <<<'EOM'  とすればOKです。

 

そして次がNowdocを使って変数をエスケープしているコード例

こちらも次のように期待通り次の出力になります。

変数名を一切変更せずにそのまま書けるのが便利です。

 

ただこっちのデメリットは変数自体使えなくなることですね。

変数も表示したい場合はバックスラッシュを使った方がいいと思います。

ここまでのまとめ

ということでヒアドキュメントでのエスケープ方法まとめ

  • バックスラッシュでエスケープ

    例えば $hoge  を表示するなら \$hoge  のように前にバックスラッシュをつける
  • Nowdocを使ってエスケープ

    例えば <<<EOM  の識別子を <<<'EOM'  のようにシングルクォートで囲む

またNowdocを使った場合は変数の展開機能が無効になります。

なので変数の展開もしたいならバックスラッシュでエスケープするのが確実です。

以上ヒアドキュメント内で変数をエスケープする方法についてでした。

ではでは($・・)/~~~