UPDATE:2022年06月08日
PHP ヒアドキュメント
ヒアドキュメント
書式
<<<任意ID
~~
任意ID;
<<<"任意ID"
~~
任意ID;
一般的なID名
EOF(End of File)
EOD(End of Document)
EOM(End of Message)
サンプル
<?php
echo <<<EOD
文字列<br>
文字列<br>
EOD;
?>
<?php
$string = <<<"EOD"
文字列<br>
文字列<br>
EOD;
echo $string;
?>
文字列の出力 ヒアドキュメント
書式
~~
任意ID;
<<<"任意ID"
~~
任意ID;
例
1 2 3 4 5 6 7 | <?php echo <<<EOD PHPはウェブ開発に最適化された言語です。<br> もともと動的なウェブコンテンツを作成するために開発されました。<br> そのため、HTMLへ容易に組み込むことが出来ます。 EOD; ?> |
結果は
もともと動的なウェブコンテンツを作成するために開発されました。
そのため、HTMLへ容易に組み込むことが出来ます。
となります。
ヒアドキュメント構文 <<< 任意ID ~ 任意ID;
文字列を指定する方法としてヒアドキュメント構文 "<<<" が利用できます。これは、任意のIDを "<<<" の後に指定し、それに続けて改行文字を配置し、さらに続けて任意の文字列を記述した後で、同じID(終端ID)で括りを閉じます。複数行の文字列を扱うのに便利です。シングルクォート、ダブルクォート、空白はそのまま出力されます。ヒアドキュメントはダブルクォートで括る必要はありませんが、ダブルクォートで括られた文字列と全く同じ動作をします。PHP5.3からヒアドキュメントの宣言をダブルクォートで括ることが可能になりました。"EOD" というように最初のIDをダブルクォートで括って宣言が可能です。
1 2 3 4 5 6 7 8 9 10 | <?php $string = <<< EOD '文字列' "文字列" .文字列. 文字列 EOD; echo "$string"; ?> |
結果は
となります。
PHP5.3からヒアドキュメントの宣言をダブルクォートで括れる
1 2 3 4 5 6 7 8 9 10 | <?php $string = <<< "EOT" '文字列' "文字列" .文字列. 文字列 EOT; echo $string; ?> |
結果は
となります。
ID名
一般的なID名として、EOF(End of File)、EOD(End of Document)、EOM(End of Message)などが利用されます。命名規則は、1文字目はアンダースコアか数字以外の文字で始まり、2文字目以降は英数字およびアンダースコアのみを含む文字列で指定します。
ヒアドキュメントの利便性
ヒアドキュメントで指定する文字列はダブルクォートで括る必要はありませんが、ダブルクォートで括られた文字列と全く同じ動作をします。指定文字列内の変数も変遷展開されます。echo や print で出力するのとは違って、「'(シングルクォート)」 や 「"(ダブルクォート)」 を「\(バックスラッシュ)」でエスケープする必要がありません。また、\n が無くても改行が反映されます。複数行に渡る複雑な文字列を出力するのにとても便利です。echo で出力する場合と比べてみましょう。
echo '';で出力
echo と「'(シングルクォート)」で文字列を出力する場合、文字列の中に「'(シングルクォート)」が含まれていれば、「\(バックスラッシュ)」でエスケープする必要があります。また、「'(シングルクォート)」内の文字列は変数展開されないので、文字列を ' で一旦区切り「.(ドット)」で文字列を連結させて文字列の外で変数を展開させる必要があります。ソースコード上で改行させる場合も改行コード「\n」を入力する必要があります。
1 2 3 4 5 6 7 | <?php $sitename = "ウィーピックス"; $saiteurl = "https://wepicks.net/"; echo '本サイトのURLは\'<a href="'.$saiteurl.'">'.$saiteurl.'</a>\'です。<br>'."\n"; echo 'サイト名は\''.$sitename.'\'です。<br>'."\n"; echo 'ウェブ関連の情報を発信しています。'; ?> |
結果は
となります。
ヒアドキュメントで出力
指定する文字列内で「'(シングルクォート)」や「"(ダブルクォート)」を「\(バックスラッシュ)」でエスケープする必要がありません。変数も展開されます。改行コード「\n」も自動で挿入されるので、ソースコードで閲覧すると改行されます。
1 2 3 4 5 6 7 8 9 | <?php $sitename = "ウィーピックス"; $saiteurl = "https://wepicks.net/"; echo <<<EOD 本サイトのURLは'<a href="{$saiteurl}">{$saiteurl}</a>'です。<br> サイト名は'{$sitename}'です。<br> ウェブ関連の情報を発信しています。 EOD; ?> |
結果は
となります。
インデント
PHP7.3以前では、終端ID がある行には、セミコロン(;)以外の文字を含んではいけませんでした。これは、ID をインデントしてはならず、また、セミコロンの前に空白やタブを付けてはいけないということです。終端 ID の前の最初の文字は、使用するオペレーティングシステムで定義された改行である必要がありました。
PHP7.3以前では、以下はエラーになります。
1 2 3 4 5 6 7 8 9 | <?php $string = <<< EOT 文字列 文字列 文字列 EOT; echo "$string"; ?> |
PHP7.3 以降では、終端ID は、スペースまたはタブでインデントできます。 その場合、終端IDの行でインデントされた部分は文字列の全ての行から取り除かれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php // 終端IDをインデントしない場合 echo <<<END a b c \n END; // 終端IDを4つのスペースでインデントする場合 echo <<<END a b c END; ?> |
ソースコード上で確認すると結果は
b
c
a
b
c
となります。
インデントを挿入する場合、タブとスペースを混ぜてはいけません。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | <h3>「ヒアドキュメント」文字列の出力</h3> <?php echo <<<EOD PHPはウェブ開発に最適化された言語です。<br> もともと動的なウェブコンテンツを作成するために開発されました。<br> そのため、HTMLへ容易に組み込むことが出来ます。 EOD; ?> <h3>「ヒアドキュメント」文字列の出力 変数に格納</h3> <?php $string = <<<EOD PHPはウェブ開発に最適化された言語です。<br> もともと動的なウェブコンテンツを作成するために開発されました。<br> そのため、HTMLへ容易に組み込むことが出来ます。 EOD; echo $string; ?> <h3>「ヒアドキュメント」シングルクォートやダブルクォートが含まれる文字列の出力</h3> <?php $string = <<<EOD '文字列' "文字列" .文字列. 文字列 EOD; echo $string; ?> <h3>「ヒアドキュメント」文字列の出力 宣言をダブルクォートで括る</h3> <?php echo <<<"FOOBAR" Hello World! FOOBAR; ?> <h3>複数行の文字列の出力「echo」の場合</h3> <?php $sitename = "ウィーピックス"; $saiteurl = "https://wepicks.net/"; echo <<<EOD 本サイトのURLは'<a href="{$saiteurl}">{$saiteurl}</a>'です。<br> サイト名は'{$sitename}'です。<br> ウェブ関連の情報を発信しています。 EOD; ?> <h3>複数行の文字列の出力「ヒアドキュメント」の場合</h3> <?php $sitename = "ウィーピックス"; $saiteurl = "https://wepicks.net/"; echo '本サイトのURLは\'<a href="'.$saiteurl.'">'.$saiteurl.'</a>\'です。<br>'."\n"; echo 'サイト名は\''.$sitename.'\'です。<br>'."\n"; echo 'ウェブ関連の情報を発信しています。'; ?> <h3>「ヒアドキュメント」のインデント</h3> <?php // 終端IDをインデントしない場合 echo <<<END a b c \n END; // 終端IDを4つのスペースでインデントする場合 echo <<<END a b c END; ?> |
PHPはウェブ開発に最適化された言語です。
もともと動的なウェブコンテンツを作成するために開発されました。
そのため、HTMLへ容易に組み込むことが出来ます。
「ヒアドキュメント」文字列の出力 変数に格納
PHPはウェブ開発に最適化された言語です。
もともと動的なウェブコンテンツを作成するために開発されました。
そのため、HTMLへ容易に組み込むことが出来ます。
「ヒアドキュメント」シングルクォートやダブルクォートが含まれる文字列の出力
'文字列'
"文字列"
.文字列.
文字列
「ヒアドキュメント」文字列の出力 宣言をダブルクォートで括る
Hello World!
複数行の文字列の出力「echo」の場合
本サイトのURLは'https://wepicks.net/'です。
サイト名は'ウィーピックス'です。
ウェブ関連の情報を発信しています。
複数行の文字列の出力「ヒアドキュメント」の場合
本サイトのURLは'https://wepicks.net/'です。
サイト名は'ウィーピックス'です。
ウェブ関連の情報を発信しています。
「ヒアドキュメント」のインデント
a
b
c
a
b
c
タグ(=記事関連ワード)
日付
最終更新日:2022年06月08日