PHPにヒアドキュメントについて解説していきます。
どんなときに使うのかと言うと、複数行の文字列を見やすく記述することが出来ます。
ヒアドキュメントを上手く使えるかどうかで、プログラミングの見通しがかなり良くなります。
見通しの良さを考えてプログラミングできるかどうかは、PHPの初心者と上級者の違いだと思いますので、なるべく見やすくなるように心がけていきましょう。
例としてこのような複数行の文字列をPHPで出力させてみたいと思います。
<p class=”test”>こんにちはカズキです。<br>
本日は○月○日、時刻は00:00です。<br>
今日も頑張りましょう!</p>
ヒアドキュメントを使わないと読みにくい
PHPでは文字列を連結させるためにドット(.)を使います。
しかし、この連結を使いすぎるのはNGです。
ドットだけで連結させて出力することも可能ですが、文字列が複雑になればなるほど読みにくくなってしまうのです。
それはまずは、文章の要素を構成するクラスと変数を設定します。
日付を設定するPHP
class today
{
public $time;
public function __construct()
{
$this->date = new DateTime();
$this->date->setTimeZone(new DateTimeZone('Asia/Tokyo'));
//時間
$this->time = $this->date->format('H:i');;
}
//日付
public function date()
{
return $this->date->format('m月d日');
}
}
$today = new today();
$name = 'カズキ';
ヒアドキュメントの本題はここから。
文字列の連結を使って文章を出力させるとこのようになります。
文章を出力するPHP
echo "<p class=\"text\">こんにちは" . $name . "です。<br>\n";
echo "本日は" . $today->date() . "、時刻は" . $today->time . "です。<br>\n";
echo "今日も頑張りましょう!</p>";
ダブルクォーテーションを出力させる時、バックスラッシュ(\)でエスケープさせたり、改行させるためも改行コードを設定しなくてはいけません。
なので、複雑になればなるほど見にくくなります。
これを見やすくするためにヒアドキュメントを使うのです。
ヒアドキュメントを利用
ヒアドキュメントを利用するとこのようなコードになります。
ヒアドキュメントで文章を出力するPHP
print <<< "EOD"
<p class="test">こんにちは{$name}です。<br>
本日は{$today->date()}、時刻は{$today->time}です。<br>
今日も頑張りましょう!</p>
EOD;
EODの部分は任意の識別子で、どんな文字列でも構いませんが、よく使われるのはこれらですね。
- EOD
- EOT
- EOL
- END
識別子をダブルクォーテーション(”)で囲み、変数をを展開して出力させることが出来ます。
インデントがエラーになる
ヒアドキュメントはインデントを正しく使わないとエラーになってしまいます。
インデントでエラーになるコード
print <<< "EOD"
<p class="test">こんにちは{$name}です。<br>
本日は{$today->date()}、時刻は{$today->time}です。<br>
今日も頑張りましょう!</p>
EOD;
引数にも設定できる
ヒアドキュメントは、関数の引数にも設定することが出来ます。
testという関数を作り、引数にヒアドキュメントを設定して、実行させます。
引数にヒアドキュメントを設定したコード
//引数を受け取る関する
function test($test)
{
print $test;
}
//引数を設定して関数を実行する
test(<<< "EOD"
<p class="test">こんにちは{$name}です。<br>
本日は{$today->date()}、時刻は{$today->time}です。<br>
今日も頑張りましょう!</p>
EOD
);
変数を展開しないNowdoc
任意の識別子をシングルクォーテーション(’)で囲むと変数等を展開せずそのまま文字列を出力されます。
Nowdocを使った出力の例
echo <<< 'EOD'
<p class="test">こんにちは$nameです。<br>
本日は$today->date()、時刻は$today->timeです。<br>
今日も頑張りましょう!</p>
EOD;
コメント