【PHP】 ヒアドキュメントで$をそのまま出力する
更新日:2020/12/24
ヒアドキュメントではなくNowdocを使用する
PHPにはNowdocという機能があります。
これをヒアドキュメントに似ているけれど、別の機能です。
ヒアドキュメントは$があると変数として展開してくれます。
ヒアドキュメント
$t = '太郎';
$s = <<< EOM
僕の名前は$t
EOM;
この結果、$sの内容が'僕の名前は太郎'になります。
ヒアドキュメントで変数名をそのまま出力したいときは、$をエスケープします。
ヒアドキュメント
$t = '太郎';
$s = <<< EOM
僕の名前は\$t
EOM;
この結果、$sの内容が'僕の名前は$t'になります。
しかしNowdocを使用すると、もっと簡単です。
Nowdocは<<<の後の識別子をシングルクォートで囲みます。
$s = <<< 'EOM'
そして、$があってもそのまま出力します。
Nowdoc
$t = '太郎';
$s = <<< 'EOM'
僕の名前は$t
EOM;
この結果、$sの内容が'僕の名前は$t'になります。
僕がNowdocを使った理由
このサイトはSIRIUSという静的CMSで作成しているのですが、テンプレートを無理やり編集して、インデックスページ内に無理やりPHPコードを出力させてたりします。
$datalist=[]; $datalist[] = <<< EOM <div>記事タイトル1</div> <div>記事内容</div> EOM; $datalist[] = <<< EOM <div>記事タイトル2</div> <div>記事内容</div> EOM; ・・・もっと続く
で、インデックスが呼ばれたとき数行おきに広告を挿入しています。
しかし、次の記事に困ってしまいました。
■【JavaScript】 変数名の$(ドルマーク)はどんな意味がある?
上のタイトルを使用してイメージ的には、次のようなPHPコードを生成します。
$datalist[] = <<< EOM <div>【JavaScript】 変数名の$(ドルマーク)はどんな意味がある?</div> <div>記事内容</div> EOM;
$が含まれているため変数とみなされて、上手く生成してくれないのです。
最初はタイトルに\$をいれていましたが、一部でそのまま\が表示されてしまうなどトラブルが続出です。
Nowdocを知ったときは、本気で感動しました。
まとめ
ヒアドキュメントは便利だけれど、$マークをそのまま出力したいとき困ります。
そんなときはNowdocを使ってみましょう。
更新日:2020/12/24
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。