PHPでヒアドキュメントを使ったスクリプトを書いたとき、、ヒアドキュメントの次のステートメントで、下記のようなエラーが出る場合があります。
PHP Parse error: syntax error, unexpected end of file xxx.php line x
Parse error: syntax error, unexpected end of file in xxx.php line x
もしくは、
PHP Parse error: syntax error, unexpected end of file,
expecting variable (T_VARIABLE) or heredoc end (T_END_HEREDOC) or ${ (T_DOLLAR_OPEN_CURLY_BRACES) or {$ (T_CURLY_OPEN)
in xxx.php on line x
Parse error: syntax error, unexpected end of file,
expecting variable (T_VARIABLE) or heredoc end (T_END_HEREDOC) or ${ (T_DOLLAR_OPEN_CURLY_BRACES) or {$ (T_CURLY_OPEN)
in xxx.php on line x
もしくは、
PHP Parse error: syntax error, unexpected '<<' (T_SL) in ...
Parse error: syntax error, unexpected '<<' (T_SL) in ...
ヒアドキュメントの直後の文がエラーになる理由
上記のエラーが出るときによくある、やってしまいがちなミスは、下記の2点です
- ヒアドキュメント開始マーカーの後ろにスペース、タブなどが入っている
- ヒアドキュメント終了マーカーのあとの";"の後ろにスペース、タブなどが入っている
下記のコードはNGな例です。
ぱっと見では分かりませんが、コードを範囲選択してみると行の後ろに空白文字が入っていることが分かります。
<?php
// ↓この下のの行の"EOT"の後にスペースが入っているとダメ
$data =<<<EOT
foo bar
EOT;
// ↑この上の行の"EOT;"の後にスペースが入っているとダメ
ヒアドキュメントの構文でスペースを入れてよい場所
ちなみに、スペースがあってなならないのは、EOTの"後ろ"なので、下記のパターンはOKです。
# <<<の手前にスペースを入れるのはOK
$data = <<<EOT
...
EOT;
# <<<の直後にスペースを入れるのはOK
$data = <<< EOT
...
EOT;
こちらもおススメ