Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【PHPプログラミング】ヒアドキュメント構文 (“<<<“)使ってみた例~メール確認画面&入力内容などの変数渡し

更新: 2023/04/11 2387文字

今回は、PHPプログラミングで、たまに使うかもしれない『ヒアドキュメント構文 (“<<<“)』について、取り上げます。当サイト管理人は、PHPプログラムに挟んで文字列やhtml出力をするときに、 『コロン構文(<?php if ($a == 5): ?>なんか出力や処理<?php endif; ?> みたいなやつ)』 『ドットイコール演算子($foo=〇〇; $foo.=△△; $foo.=□□; のように結合していくやつ)』 を使っていることが多かったんですけど、久しぶりに『ヒアドキュメント構文 (“<<<“)』を使ったので、状況を説明していきます。さっそくみていきましょう。

PHP ヒアドキュメント構文とは?(EOMはidだよ)

画像はPHPマニュアルにあった例です。文字列を指定するときの構文の一つで、『<<<のあとに任意のID・文字列を指定して(長めでもok)、最後に同じIDで閉じる』というものです。 指定した文字列は変数に格納して、好きなところで出力したり、また、ヒアドキュメント構文の中で変数を展開出来たりもします。

ちなみに、以前当サイト管理人が勘違いしていた件。『ヒアドキュメント構文はEOMだと思っていたが、EOMはIDだった』って点です(笑)。このEOM(End of Message)は、ただ単に『よく使われるID名』ということです。このほか『EOD(End of Document)』みたいなIDも良く使われます。

そのほか、『PHP 7.3.0 以降は、終端IDが文字列本体よりも奥にインデントされた場合、 ParseError発生』のような挙動もありますので、PHPマニュアルも読んでおくとよいでしょう。

ヒアドキュメント構文例~メール確認画面&入力内容などの変数渡し

ここでは、管理人が以前作ったメール送信プログラムの一部で、ヒアドキュメント構文例を紹介します。 『(例えばWPの場合だと) <?php while($the_query -> have_posts()): $the_query -> the_post(); if($〇〇) { 

なんかhtml出力

<?php } endwhile; ?> 』みたいなのはわかりにくかったんだけど、ヒアドキュメントのほうが分かりやすいかなといった感じがありました。個人差はあると思います。

プログラム例(フォームから値を受け取って判定&入力内容確認する部分 試作品)

一部の部分は長いので省略していますが、こんな感じのプログラムになっています。試作品なので、こんご変更がいっぱい入ります。まず前半部分。 上のほうはセッション・言語・文字コード・タイムゾーンなど設定で、フォームから受け取った内容をエスケープしたりバリデーションしたり(一部省略)といった内容です。エラー情報はセッション変数に格納し、それをフロントに渡して『〇〇の入力不備を直してください』みたいな機能に。あと、mb_send_mailの結果受け取りにもセッション使ってます。

そして後半部分。 流れ的には『バリデーションokだった場合、本文をセッションなどにセット・確認画面を表示して、okなら送信して完了ページへ』という感じ。$to_admin_bodyが3つに分かれている理由は『ヘッダーとフッターは他テンプレートでも使いまわす・確認部分は真ん中しか使わない』ということです。ここでちょっとした確認画面を出すときに、ヒアドキュメント構文でhtmlを出力しました。

最後にある『 }』は、この画像には映ってないけど、上のほうにifがあって、その終わり部分です (波括弧が片方だけだとエラーになります)。

ヒアドキュメント構文使用部分 解説

このケースではヒアドキュメントのIDは『EOF』となっていて、『末尾EOF』までのhtmlの部分を指定。このhtmlの部分は変数に格納できたりもしますが、別のところで使う予定はないので、そのままechoで出力。

ヒアドキュメント文字列内では変数も展開できるため、 『file_get_contentで別フォルダのcssを取ってきてヘッダー出力($confcss)』 『フォーム入力した内容をテンプレートにセットして、変数に格納して展開($body_conf)』 という形で使用しています。

あとがき・まとめ

  • PHPではhtml出力時に、コロン構文やドットイコールのほか、ヒアドキュメント構文が使える
  • ヒアドキュメント構文ではの後の任意ID~末尾の同じIDの間を指定する
  • ヒアドキュメント構文の中では変数を展開したり、内容を変数に格納したりできる

こんかいやった内容をまとめると、こんなところでしょうか。このほかにも『 ヒアドキュメントがダブルクォートで囲んだ文字列として扱われる』『関数の引数にデータを渡す』『パースエラーの例』などの項目があるので、PHPマニュアルを確認の上、使えそうだったらご検討ください。


【カテゴリ】- PHP
【タグ】-

関連記事