PHPのヒアドキュメント内で変数名そのものを展開せずに表示したい場合、
ドキュメント内で変数名をエスケープすることで変数名自体の表示が可能です。
そのエスケープ方法には2つあるので、そのやり方についてまとめました。
ヒアドキュメントでは変数は勝手に展開されてしまう
ヒアドキュメントはPHPで長い文字列を表示するのに便利な構文
この中で $ から始まる変数を書くことで、その内容を展開することができます。
また次で紹介したようにクラス変数や関数・式なんかを展開することも可能
ただこの展開機能は変数名自体を表示したいときに少し厄介ですよね。
例えば次のコードのような場合
1 2 3 4 5 6 7 |
$foo = 'fooooooo'; $bar = 'baaaaaar'; echo <<<EOM $foo is a variable. $bar is also a variable. EOM; |
これを実行すると次のように変数の内容が出力されてしまいます。
1 2 |
fooooooo is a variable. baaaaaar is also a variable. |
なので変数名自体を表示したい場合、エスケープが必要です。
ヒアドキュメント内で変数をエスケープする方法
そのエスケープする方法というのが次の2つ
- バックスラッシュでエスケープ
- nowdocを使ってエスケープ
この2つのやり方については次の通り
バックスラッシュでエスケープ
まず1つめの方法はバックスラッシュ \ でエスケープする方法
ヒアドキュメント内で使えない $ や \ などの記号がエスケープできます。
例えば次が変数名をエスケープしているコード例
1 2 3 4 5 6 7 |
$foo = 'fooooooo'; $bar = 'baaaaaar'; echo <<<EOM \$foo is a variable. \$bar is also a variable. EOM; |
\$foo や \$bar のように変数名の前に \ を置くだけです。
そしてこのように書けば次の期待通りの出力になります。
1 2 |
$foo is a variable. $bar is also a variable. |
ちなみに \ 自体をエスケープするなら \\ のように2つ重ねてあげればOK
Nowdocでエスケープする
もう1つの方法はPHP5.3.0以降で使えるようになったNowdocを使う方法
NowdocについてはPHPマニュアルで次のように説明されていました。
Nowdoc はヒアドキュメントと似ていますが、 ヒアドキュメントがダブルクォートで囲んだ文字列として扱われるのに対して、 Nowdoc はシングルクォートで囲んだ文字列として扱われます。 Nowdoc の使用方法はヒアドキュメントとほぼ同じですが、 その中身について パース処理を行いません。
Nowdocを使うとシングルクォートで囲んだように扱われるようです。
なので $hoge のように変数名を書いても展開される心配がありません。
Nowdocの書き方は <<< の後に続く識別子をシングルクォートで囲むだけ
例えば <<<EOM だったところを <<<'EOM' とすればOKです。
そして次がNowdocを使って変数をエスケープしているコード例
1 2 3 4 5 6 7 |
$foo = 'fooooooo'; $bar = 'baaaaaar'; echo <<<'EOM' $foo is a variable. $bar is also a variable. EOM; |
こちらも次のように期待通り次の出力になります。
1 2 |
$foo is a variable. $bar is also a variable. |
変数名を一切変更せずにそのまま書けるのが便利です。
ただこっちのデメリットは変数自体使えなくなることですね。
変数も表示したい場合はバックスラッシュを使った方がいいと思います。
ここまでのまとめ
ということでヒアドキュメントでのエスケープ方法まとめ
- バックスラッシュでエスケープ
例えば $hoge を表示するなら \$hoge のように前にバックスラッシュをつける - Nowdocを使ってエスケープ
例えば <<<EOM の識別子を <<<'EOM' のようにシングルクォートで囲む
またNowdocを使った場合は変数の展開機能が無効になります。
なので変数の展開もしたいならバックスラッシュでエスケープするのが確実です。
以上ヒアドキュメント内で変数をエスケープする方法についてでした。
ではでは($・・)/~~~