PHP でヒアドキュメントを書く
コレまで色々な言語でのヒアドキュメントの書き方を紹介してきた。
- Bash :
cat <<EOL
→> EOL
- Perl :
print <<EOL;
→EOL
- JavaScript (ES2015) : バッククォートを使ったテンプレートリテラルが近い
PHP でもヒアドキュメントが書けるので紹介。
echo
でもヒアドキュメントチックなことができる
$name = 'Neo';
echo "こんにちは
はじめまして $name さん
どうぞ
よろしく";
↑ コレはヒアドキュメントではないが、PHP はクォートの中で改行しても文章が書ける。
ダブルクォートを使っていれば変数が展開される。変数はスペースで区切ることで認識される。
- ○
はじめまして$name さん
→ スペースで区切っているので変数$name
を探してくれる - ×
はじめまして$nameさん
→$nameさん
という変数と扱われてしまう
このように、変数の後ろはスペースを入れていないと正しく認識されない。
スペースを入れたくない場合は文字列結合 (ピリオド .
) を使う。
$name = 'Neo';
echo "こんにちは
はじめまして" . $name . "さん
どうぞ
よろしく";
こんな感じ。
なお、シングルクォートを使っていた場合は、はじめまして $name さん
と変数展開されずに表示される。
ヒアドキュメント
$name = 'Neo';
echo <<<EOL
こんにちは
はじめまして $name さん
どうぞ
よろしく
EOL;
↑ コレがヒアドキュメント。コチラも変数の後ろをスペースで区切っていれば変数展開される (変数の手前はスペースがなくても大丈夫)。
変数の後ろにスペースを入れずに書くには、ブレース {}
で変数を囲むと良い。{$name}
と書くワケだ。
$name = 'Neo';
echo <<<EOL
こんにちは
はじめまして{$name}さん
どうぞ
よろしく
EOL;
他に PHP 5.3.0 からは Nowdoc という構文も使えるようになった。 <<<EOL
部分は本来 <<<"EOL"
(ダブルクォート) とも書けるのだが、コレを <<<'EOL'
とシングルクォートにすると Nowdoc 構文になる。ヒアドキュメントとの違いは、変数展開がされないということ。
- 参考 : PHPで文字列をHTMLに出力するいくつかの方法
- 参考 : Use variable within heredoc in PHP (SQL practice) - Stack Overflow
- 参考 : https://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.nowdoc
以上。