ヒアドキュメントを使った文字列リテラルの作成

文字列を作成する場合はヒアドキュメントと呼ばれる形式を利用することができます。ここでは PHP でヒアドキュメントを使った文字列リテラルの作成方法について解説します。

(Last modified: )

ヒアドキュメントを使った文字列リテラルの作成

文字列を作成するにはヒアドキュメントを使用することもできます。ヒアドキュメントを記述するには <<< のあとに任意の文字列を記述した ID を記述し、改行してください。最後に先ほど書いた同じ ID の文字列を記述します。

<<<ID
文字列1
文字列2
文字列3
ID

※ ID として指定できる文字列は英数字またはアンダーバーの組み合わせで指定し、数字からは開始できません。

ID の部分は任意の文字列が指定できます。例えば LABEL という値を使用した場合は次のようになります。

echo <<<LABEL
こんにちは。
お元気ですか?
LABEL;

DOC という値を使用した場合は次のようになります。

echo <<<DOC
こんにちは。
お元気ですか?
DOC;

複数行にわたる文字列を記述する場合に便利ですが、この文字列を例えば echo で出力すると、自動的に改行が行われるわけではない点に注意して下さい。

ヒアドキュメントを使った文字列の中ではシングルクオーテーション( ' )やダブルクオーテーション( " )も単なる文字として扱われます。エスケープなどはする必要がありません。

echo <<<END
I'm a student.
I go to "school" by bus.
END;

" 以外のエスケープシーケンスは有効なので例えば文字として \n と記述したい場合はエスケープして \\n と記述する必要があります。

ただし ID として指定した文字列が、ヒアドキュメントの文字列の中に現れるとエラーとなるため、文字列の中で使用する文字列は ID に使用しないでください。

エスケープシーケンスと変数展開

ヒアドキュメントで文字列を作成した場合は、ダブルクオーテーション( " )で囲んだ文字列と扱いは同じになります。そのため、エスケープシーケンスや変数展開も利用できます。

次の例を見てください。

<pre>
<?php
$name = "本田";
echo <<<LABEL
こんにちは。\n私の名前は{$name}です。
LABEL;
?>
</pre>

エスケープシーケンスで改行を行った上に変数展開を行っています。この場合は次のように表示されます。

こんにちは。
私の名前は本田です。

Nowdocの利用

ヒアドキュメントの ID の部分をシングルクオーテーション( ' )で囲んだものを Nowdoc と呼びます。(終端 ID の方は囲みません)。

<<<'ID'
文字列1
文字列2
文字列3
ID

Nowdoc で文字列を作成した場合は、シングルクオーテーション( ' )で囲んだ文字列と扱いは同じになります。そのため、エスケープシーケンスや変数展開は行われません。

次の例を見てください。

<pre>
<?php
$name = "本田";
echo <<<'LABEL'
こんにちは。\n私の名前は{$name}です。
LABEL;
?>
</pre>

エスケープシーケンスや変数展開は行われないため、次のように表示されます。

こんにちは。\n私の名前は{$name}です。

終端IDを使ったインデントについて

ヒアドキュメントの終端 ID は通常は行の先頭に記述しますが、終端 ID の前にスペースやタブでインデントを追加した場合は、終端 ID の位置がヒアドキュメント全体の先頭位置となります。

次の例を見てください。

<pre>
<?php
echo <<<LABEL
     こんにちは。
       私の名前は本田です。
LABEL;
?>
</pre>

これは次のように表示されます。

     こんにちは。
       私の名前は本田です。

では終端 ID の前にスペースを 4 つ追加してみます。

<pre>
<?php
echo <<<LABEL
     こんにちは。
       私の名前は本田です。
    LABEL;
?>
</pre>

終端 ID の位置がヒアドキュメントの先頭として扱われるので、次のように表示されます。

 こんにちは。
   私の名前は本田です。

このように終端 ID の前にスペースやタブを追加することで、ヒアドキュメント全体のインデントを設定することができます。なお終端 ID の位置よりも前に文字列が表示されている場合はエラーとなります。

サンプルコード

では簡単なプログラムで試して見ます。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>

<pre>
<?php
echo <<<LABEL
こんにちは。
私の名前は本田です。
また会いましょう。
LABEL;
?>
</pre>

</body>
</html>

sample.php というファイル名で Web サーバのドキュメントルートに保存しました。そのあとでブラウザからアクセスします。

ヒアドキュメントを使った文字列リテラルの作成

ヒアドキュメントの形式で作成した文字列が画面に出力されました。

-- --

PHP でヒアドキュメントを使った文字列リテラルの作成方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。