今回はPHPのヒアドキュメントとそれに似たNowdocの使い方を解説します。
ヒアドキュメントの使い方
ヒアドキュメントはこんな感じで書きます。
<?php
$msg = <<<EOD
こんにちは!
今日もいい天気ですね!
朝ごはんは何を食べましたか?
EOD;
echo $msg;
?>
結果
こんにちは!
今日もいい天気ですね!
朝ごはんは何を食べましたか?
こんな感じで複数行のテキストをそのまま変数に入れて出力できます。EODの部分はEOTやABCなど、同じ文字列なら何でも大丈夫です。
また、エディター上の改行がそのまま反映されている点に注意しましょう。ヒアドキュメント内では\nなしでもエディター上の改行が本文の改行となります。
ちなみにEODはEnd Of Docuementという意味です。ヒアドキュメントで他によく使われる文字列は、
- EOM:End Of Message
- EOT:End Of Text
- EOF:End Of File
などがあります。このあたりの文字列を使ったほうがわかりやすいですね。
なお、ブラウザ上で表示を確認したい場合はnl2br()
関数を通して出力しましょう。そのままだとソースコード上では改行されますが、ブラウザ上では改行にはならないので気をつけてください。
echo nl2br($msg);
ヒアドキュメント内で変数を使う
ヒアドキュメント内で変数を使いたい場合は{}
で囲めばokです。
<?php
$name = '山田';
$msg = <<<EOD
こんにちは!{$name}さん!
今日もいい天気ですね!
EOD;
echo $msg;
?>
結果
こんにちは!山田さん!
今日もいい天気ですね!
なお実は{}
で囲まなくても変数を出力できるのですが、変数の後ろに空白を入れる必要があり、そのままだと空白まで出力されてしまいます。
なので、変数の後ろに文章がないときなら{}
なしで変数を出力しても大丈夫ですね。
$name = '山田';
$age = '24';
$sex = '男';
$msg = <<<EOD
プロフィール
名前:$name
年齢:$age
性別:$sex
EOD;
echo $msg;
結果
プロフィール
名前:山田
年齢:24
性別:男
ヒアドキュメントに似てる!Nowdocとは?
Nowdocとは変数の値ではなく変数名をそのまま出力できる構文です。
使い方はヒアドキュメントの開始の文字列をシングルクオートで囲むだけです。
<?php
$name = '山田';
$msg = <<<'EOD'
こんにちは!{$name}さん!
今日もいい天気ですね!
EOD;
echo $msg;
結果
こんにちは!{$name}さん!
今日もいい天気ですね!
変数名はもちろん、クラスやメソッドも全部文字列のまま出力されちゃいます。使い所があまりなさそう。
余談
日本語と英語の呼び名です。
- ヒアドキュメント→here document
- Nowdoc→Nowdoc
日本語ではナウドックとかナウドキュメントって呼ばないんだろうか…
ヒアドキュメントはどんなときに使う?
ヒアドキュメントは数行に渡る長い文章を変数に入れたいときに使います。
例えば自動返信メールの本文はかなり長いので、これをそのまま変数に入れるのはちょっと面倒ですね。そんなときにヒアドキュメントを使うとバーっと文章を書いてそのまま変数に突っ込めるわけです。
まとめ
ヒアドキュメントのメインの使いどころは自動返信メールの本文とかだと思います。
自動メールの処理は結構よく使うので、ヒアドキュメントも知っておいて損はないはずです。
便利なので使えるようにしておくといいでしょう。