[ PHP ] ヒアドキュメントと newdoc の違いと Parse error が発生する原因

Pocket

ここでは、ヒアドキュメントと newdoc 構文の違いと、ヒアドキュメントで Parse error が発生する原因を掲載しています。

スポンサーリンク

ヒアドキュメントと newdoc 構文の違い

ヒアドキュメントと newdoc 構文はともに複数行の文字列設定を視覚的にわかりやすくするための構文です。以下はその記述例となります。また、その設定には、「 一重引用符と二重引用符の違い 」 で記載した規則が適用されます。

newdoc 構文は PHP5.3.0 以降で記述できます

ヒアドキュメントと newdoc 構文の記述例

/*
 * ヒアドキュメント構文
 */
$str = <<< EOT
line1
line2
line3

EOT;

var_dump($str);
// 出力
// -------------------------------------------------------
// string 'line1
// line2
// line3
// ' (length=18)

/*
 * ヒアドキュメントは改行を改行として判断したり、ダブルクォーテーションをヒアドキュメント内に
 * エスケープさせずに記述可能であるなど、細かな違いは存在するが、ほぼ二重引用符で囲った文字列と
 * 同様なパース処理が行われ、変数なども展開してくれる。
 * '\n' をヒアドキュメント内に記述した場合、それも改行として扱われる。
 */

/*
 * Newdoc 構文
 */
$str = <<< 'EOT'
line1\n
line2\n
line3\n

EOT;
var_dump($str);

// 出力
// -------------------------------------------------------
// string 'line1\n
// line2\n
// line3\n
// ' (length=24)

ヒアドキュメントでエラーが発生する原因

ヒアドキュメントでは記述方法の制約によって、以下のエラーが発生する場合があります。

Parse error: syntax error, unexpected $end, expecting T_VARIABLE or T_END_HEREDOC or T_DOLLAR_OPEN_CURLY_BRACES or T_CURLY_OPEN in ・・・

エラーとなる記述例を下記に示します。

ドキュメントの最後に改行が入っていない

print <<< EOS
    私のお墓の前で泣かないでください。
    そこに私はいません。
EOS;
    

ドキュメントの最後の区切り文字(上記の場合は EOS)の後ろのセミコロン ( ; ) の後ろに改行が入っていないと、エラーが発生します。必ず区切り文字の最後には改行を入れる必要があります。

なお、EOS は End Of String の略です。EOS である必要はなく、任意の文字列を区切り文字として使用することができます。

ドキュメントの区切り文字の前にスペースやタブが入っている

print <<< EOS
    私のお墓の前で泣かないでください。
    そこに私はいません。
    EOS;
    

区切り文字(EOS)の前にはスペースやタブを入れることはできません。また、区切り文字の後ろのセミコロン ( ; ) の後ろにもタブ、スペースおよびコメントなども記述できません。 なお、( print <<< EOS ) の部分の前にスペースやタブが入っていても問題ありません。

参考

PHP マニュアル:文字列

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *