初心者向けプログラミング解説!PHPのヒアドキュメントが便利

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;

コメント

タイトルとURLをコピーしました