PHP

PHPで改行含む文字列を出力する方法「ヒアドキュメント」

PHPでは、改行を含む文字列を出力することができる「ヒアドキュメント」という仕組みがあります。問い合わせ内容を自分宛に、自動返信のメールを送付者側に送る問い合わせフォームで大変便利で、この仕組みを知っていると知らないではかなり違ってきますので、ご紹介したいと思います。

ヒアドキュメントの記述方法

以下の「<<< EOM」から「EOM;」までの部分です。

<?php
$your_name = 'お名前'
$content = <<< EOM
{$your_name} 様
お問い合わせいただき、
まことにありがとうございます。
内容確認のうえ、ご返信いたしますので、
しばらくお待ちください。
EOM;
echo $content;
?>

EOMの部分は何でもよく、大文字の3文字でよく使われるのは「EOM」「EOF」「EOD」などです。「EOM」は End of Message、「EOF」は End of File、「EOD」は End of Document の略です。

通常ですと、以下のように改行コードの「/n」を使うことになり、出力される文章の見え方がコーディング時点では分かりづらいという難点があり、その難点をクリアする仕組みとしてヒアドキュメントは便利というわけです。

<?php
$your_name = 'お名前'
$content = $your_name . ' 様/n/n';
$content .= 'お問い合わせいただき、/n';
$content .= 'まことにありがとうございます。/n/n';
$content .= '内容確認のうえ、ご返信いたしますので、/n';
$content .= 'しばらくお待ちください。';
echo $content;
?>

ヒアドキュメント内の変数の出力

上記の通り、

{$your_name}

という風に{}で囲ってヒアドキュメント内で変数を出力することもできます。

注意点

大変便利なのですが、PHP7.2以前だと、最後の文字列(例:EOM;)が含まれる行では、前後にタブ/空白によるインデントも含むことができません。EOM;の記述を左端に寄せて書けばOKということです。

また、PHP8でも、最後の文字列(例:EOM;)が含まれる行のインデント位置よりもインデントが少ない行を存在させると、少ない分文字が削られてしまうので、最後の行よりもインデントが少ない行を存在させないようにしましょう。

手っ取り早いのは、「<<< EOM」~「EOM;」までの行はすべてインデントを設けず、左端に寄せて書いてしまう方法です。そうすれば、上記のいずれの問題も生じ得ません。

まとめ

問い合わせフォームの文章作成などで大変便利なPHPのヒアドキュメントのご紹介でした。JavaScriptでは現時点このような仕様は用意されていません。

著者のイメージ画像

BringFlower
稲田 高洋(Takahiro Inada)

2003年から大手総合電機メーカーでUXデザインプロセスの研究、実践。UXデザイン専門家の育成プログラム開発。SEOにおいても重要なW3Cが定めるWeb標準仕様策定にウェブアクセシビリティの専門家として関わる。2010~2018年に人間中心設計専門家を保有、数年間ウェブアクセシビリティ基盤委員も務める。その後、不動産会社向けにSaaSを提供する企業の事業開発部で複数サービスを企画、ローンチ。CMSを提供し1000以上のサイトを分析。顧客サポート、サイト運営にも関わる。
2022年3月にBringFlowerを開業し、SEOコンサル、デザイン、ウェブ制作を一手に受ける。グッドデザイン賞4件、ドイツユニバーサルデザイン賞2件、米国IDEA賞1件の受賞歴あり。
プロフィール詳細