PHPのヒアドキュメントでの出力方法と、よくあるエラー

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

PHPで改行混じりの長文などを出力する際に便利な、ヒアドキュメントをご紹介します。

ダブルクォートで囲わなくても、エスケープを気にせずとも簡単に出力できますが、思わぬエラーで軽くハマることもありました。

ヒアドキュメント構文のよくあるエラー解決法もご紹介します。

 

ヒアドキュメントの基本

ヒアドキュメントの書き方

ヒアドキュメントで、
テキスト出力も自由自在!!

EODというIDに挟まれたエリアに入力されたテキストが表示され、しかも改行タグも反映されました。

ヒアドキュメントの構文

<<<開始ID
文字列
終端ID;

<<<のあとに開始IDを入れ、最後にも同じ終端IDを入れます。

(上記サンプルでは EOD)

IDの命名ルール

ヒアドキュメントのID名は、以下のルールに気を付けて命名しましょう。

  • 開始ID、終端IDは必ず同じ名前にする
  • IDはアルファベット大文字・小文字、日本語でもOKだが、アルファベット大文字が基本
  • 数字を先頭にしてはいけない
  • 記号は_(アンダースコア)のみ可

 

ちなみによくあるID名は以下のとおりです。

  • EOD(End of Document)
  • EOM(End of Message)
  • EOF(End of File)

上記いずれかのID名を付けるのが一般的です。

ヒアドキュメントでよくあるエラー

終端IDの後には改行を入れること

終端IDの後には改行を入れないとエラーになります。

エラー構文

エラーメッセージ

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…

「構文エラーだ、予期しない終わり方だよ…」と突っ込まれています。

最後は必ず改行をしましょう。

終端IDの前後に文字列を入れてはいけない

終端IDの前後に空白やインデント、コメントなど何らかの文字列が入るとエラーになります。

エラー構文

エラーメッセージ

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…

先ほどと同じエラーですね。

終端IDは先頭に記述し、IDの後ろは;(セミコロン)と改行だけにしましょう。

インデントを入れてエラーになったという例もありますので、注意しましょう。

開始IDの後に文字列を入れてはいけない

開始IDの後に、改行以外の空白を含めた文字を入れるとエラーになります。

エラー構文

エラーメッセージ

Parse error: syntax error, unexpected ‘<<‘ (T_SL) in…

先ほどの2つとは多少違いますが、構文エラーとなります。

原則として、IDの後は改行しましょう。

 

その他に;(セミコロン)を忘れるとPHPの閉じタグで閉じた場合を除きエラーになります。

ヒアドキュメントの色々な使い方

ヒアドキュメントを変数に格納

ヒアドキュメントを変数に格納すれば、いろんな箇所で使い回すこともできます。

ヒアドキュメントで、
テキスト出力も自由自在!!

ヒアドキュメント内で変数を使う

ヒアドキュメントは文字列だけでなく、変数を使うこともできます。

こんにちは。
ここは 横浜 市です!
ごゆっくり横浜を堪能ください!

2行目のように半角スペースでも変数を使えますが、半角スペースが不自然ですね。

気になる方は、3行目の{}(波カッコ)で変数を囲う方法なら、スペースで空ける必要もなく変数を使えます。

HTMLタグも一緒に記述

ヒアドキュメントは文字列だけでなく、HTMLタグなども出力できます。

ソースの表示

<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″>
<title>ドキュメント</title>
</head>
<body>
<p>ヒアドキュメントで、<br>
テキスト出力も自由自在!!</p>
</body>
</html>

ブラウザのソースの表示を見ると、上記のようにHTMLタグも含めて出力されています。

メールフォームの定型文などを作る際も、ヒアドキュメントはよく使われますね。

Nowdocはシングルクォート版ヒアドキュメント(PHP5.3〜)

ヒアドキュメントは""(ダブルクォート)で囲ったときと同じ動作になりますが、これを''(シングルクォート)で囲ったときと同じバージョンが「Nowdoc」です。

PHP5.3より使えます。

こんにちは。
\n ここは $city 市です!

Nowdocは開始IDを''(シングルクォート)で囲うだけです。

シングルクォートなので、変数や改行文字がそのまま文字列で表示されました。

変数や\n(改行文字)などの特殊文字は、シングルクォートではそのまま文字列として表示されます。

参考:引用符による処理の違い

あまり使うことはないですが、一応覚えておくと良いでしょう。

実はあまり使わないヒアドキュメント

ここまでヒアドキュメントについてご紹介しましたが、実はわたくしヒアドキュメントはあまり使いません。

HTMLに埋め込んで使うことも多いPHPですが、以下のように部分部分でPHPタグを使う記述法をよく使います。

上記のように書けばHTMLにPHPを埋め込んでも、結構ソースもスッキリするなぁと思っています。

この辺は組織のルールや好みなどもあるでしょうが、わたくしはこういう記述法をオススメしています。

参考:PHPで文字列をHTMLに出力するいくつかの方法

いずれにしても、引用符やエスケープを多用すると思わぬエラーの元にもなるため、活用していきたいですね。

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメント

  1. 杉山 より:

    終端ID前後だとインデントの自動字下げですら空白に含まれるんですね助かりました

    1. flatFlag より:

      杉山さん

      意外な盲点ですよね。
      わたくしも実はこの記事書く際にテストしたら、軽くハマってしまいました(笑)
      杉山さんも問題が解決できたようで何よりです。

  2. 杉山 より:

    助かった

杉山 へ返信する コメントをキャンセル

*