ホームページ制作 オフィスオバタ

PHPヒアドキュメントで$付き文字をそのまま出力する

phpでHTML出力する場合、htmlファイルをそのままテンプレートとして使用します。
htmlファイルであれば、テンプレートの修正等がやりやすいためです。

ですが、部分テンプレートの場合は少し事情が変わってきます。
例えば実績表示で、写真とタイトルを表示するためのテンプレートであれば、内容が少なくHTMLファイルにするまでもありません。

その場合は、PHPで変数として使用したほうが、HTMLの読み込みをしなくてもよい分軽くなります。
ですが、普通の変数だと文字列内に「”」を使用するときに\(エスケープシーケンス)をつけなければいけません。htmlタグを使用する場合「”」は頻繁に出てきます。

そこで、ヒアドキュメント形式で記載します。
ヒアドキュメントとは、開始位置から終了位置までも変数にする記述です。
これだと、「”」もそのまま記述できます。

ですが、それでも欠点があります。

それは、「$」付きの文字が、変数扱いになる点です。
変数をあてがう場合はそのままでもよいのですが、「$」を文字として出力したい場合困ります。

今回はヒアドキュメントで「$」を文字として出力する方法を調べました。

今回の現象はこちらです

以下のソースを実行すると、$varが変数扱いになります。

<?php

$var = "変数の中身";

$out_buff = <<< EOF
[$var] を表示します。
EOF;

echo $out_buff;

?>

実行すると以下のように表示されました。

[変数の中身] を表示します。

$varが変数扱いされて、$varの中身が代入されて表示されました。
これはこれでよいのですが、私は$varを文字として出力したいです。

ということで、$varを文字として出力する方法を調べました。

次のようにしたら、変数が文字として出力されました。

ヒアドキュメントで、変数を文字として出力する方法を調べたら、思ったより簡単なことでした。
以下のように記述するだけで、$varが文字として出力されました。

<?php

$var = "変数の中身";

$out_buff = <<< 'EOF'
[$var] を表示します。
EOF;

echo $out_buff;

?>

これを実行すると、以下のように表示されました。

[$var] を表示します。

$varが文字として出力されました。

でもこう思いませんか?
あれっ?どこが違うの?

EOFを’EOF’にすると、変数が文字として出力されます

パット見わかりにくいですが、$out_buff <<< ‘EOF’ のEOFを”で囲うと変数が文字として出力されます。

何でと思いますが、理屈は以下の通りでした。

なるほど、変数を”で囲えば文字列になるということがわかりました。

【疑問】変数と文字列を混在させる場合はどうすればよいのか?

ここで疑問がわきました。
$varを文字列、変数混在にする方法はないだろうか?

汎用性を考えるならば、混在にしたいケースもあります。
調べてみると、以下のようにすればできました。

<?php

$var = "変数の中身";

$out_buff = <<< EOF
[\$var] [$var]を表示します。
EOF;

echo $out_buff;

?>

これを実行すると以下のようになりました。

[$var] [変数の中身]を表示します。

片方は文字列として出力され、もう一方は変数として出力されました。
違いは、$の前に「\」(エスケープシーケンス)をつけたことです。

この方法ならば混在にできました。

まとめ

ちょっとしたことですが、奥の深い事柄でした。

モバイルバージョンを終了