PHP PHP入門講座 プログラミング

【PHPプログラミング入門講座】文字列の結合とヒアドキュメント

PHPプログラミングのキービジュアル

2つの文字列を出力する

次のPHPプログラムは、変数$str1と変数$str2に文字列が設定され、それらを出力するPHPプログラムです。

<?php
  $str1 = 'This is ';
  echo $str1;
  $str2 = 'a pen';
  echo $str2;

このPHPプログラムの実行結果は次のようになります。

This is a pen.

$str1の値「This is 」の最後に改行「\n」が無いので、「echo $str1;」を実行した後に、「echo $str2;」を実行すると、改行されずに後ろに続けて出力されます。
(もし、改行「\n」を使う場合は「$str1 = "This is \n";」のようにダブルクォーテーションで囲まなければ改行されないので注意。)

ちなみに、このPHPプログラムは、次のように書いても同じ結果になります。

<?php
  $str1 = 'This is ';
  $str2 = 'a pen';
  echo $str1;
  echo $str2;

前の記事「【PHPプログラミング入門講座】変数」で説明しましたが、変数は値を保持する“入れ物”です。
だから、変数の値は、書き換えたり、削除したりしない限りは、プログラムの最後まで保持され続けます。
上記の$str1と$str2は変数名が違うので、順番が変わっても影響されることはなく、代入された値は保持され続けます。

文字列の結合

ところで、このプログラム、それぞれの文字列に対して全てechoを書くのは面倒ですし、プログラムの行数も多くなります。
もっと、シンプルに書けないでしょうか?

例えば、文字列を結合してまとめて出力した方がシンプルだと思いますが、どうでしょう?
ナイスアイデアだと思いませんか?(笑)

ということで強引な展開ですが、「文字列の結合」について説明します(笑)

文字列を結合するには、結合演算子「 . 」(ドット)を使います。
具体的な記述は次の通りです。

$str1 . $str2;

これで、文字列$str1と$str2が結合されます。
では、前述の例であげたPHPプログラムを結合演算子「 . 」を使って書き換えてみましょう。
次のように書けます。

<?php
  $str1 = 'This is ';
  $str2 = 'a pen';
  echo $str1 . $str2;

echoが1つになって、シンプルに書けましたね!
そして、このPHPプログラムの実行結果は、次のようになります。

This is a pen.

同じ結果が得られます。

さて、ここで少し書き方を変えてみます。
プログラムとしては4行になりますが、理解を深めるためにこのような書き方もできるということを紹介します。

<?php
  $str1 = 'This is ';
  $str2 = 'a pen';
  $new_str = $str1 . $str2;
  echo $new_str;

つまり、$str1と$str2の結合結果を変数に代入することもできるということです。
プログラムの実行結果は同じですので省略します。

文字列の結合は、PHPでプログラム開発する時に頻繁に使いますので、理解しておきましょう。

ヒアドキュメント

複数行の文字列を出力する処理をシンプルに書く方法

改行して3行の文章を出力することにしましょう。
今までの講義で説明してきた書き方で、次のようにいろいろと書くことができます。

1行ずつ出力したり。

<?php
  echo "1行目です。\n";
  echo "2行目です。\n";
  echo "3行目です。\n";

1行でまとめて出力したり。

<?php
  echo "1行目です。\n2行目です。\n3行目です。\n";

結合演算子「 . 」を使って複数個の文字列を結合したりもできます。

<?php
  $str1 = '1行目です。';
  $str2 = '2行目です。';
  $str3 = '3行目です。';
  echo $str1 . "\n" . $str2 . "\n" . $str3 . "\n";

いずれも実行確認結果は次の通りです。
(※注:このサンプルプログラムはHTMLの改行<br>ではなく、文字列の改行「\n」を使っているので、ブラウザの「HTMLソースを表示」機能を使って、HTMLソースで確認してください。)

1行目です。
2行目です。
3行目です。

ヒアドキュメントで書いてみる

3行の文章を記述する例を掲載しましたが、改行記号「\n」を毎回書くと見辛いですし、もっと文章が長くなると書くのが大変です。
そのような時は、「ヒアドキュメント」を使うと便利です。
前述のPHPプログラムをヒアドキュメントで書くと次のようになります。

<?php
  echo <<< EOF
1行目です。
2行目です。
3行目です。
EOF;

ヒアドキュメントは「<<< EOF」と「EOF;」の間の内容を1つのメッセージ(文字列)として扱う記述法です。
なので、ヒアドキュメントは、改行が多くあるテキストを扱う時に便利です。
実行確認結果は次の通りです。前のサンプルプログラムと全く同じです。
(※注:このサンプルプログラムはHTMLの改行<br>ではなく、文字列の改行「\n」を使っているので、ブラウザの「HTMLソースを表示」機能を使って、HTMLソースで確認してください。)

1行目です。
2行目です。
3行目です。

ヒアドキュメントの構文

ヒアドキュメントを構文にすると次のようになります。

  echo <<< [終了記号]
******
******
******
[終了記号];

また、ヒアドキュメントのルールは次の通りです。

  • 「<<<」の右にある[終了記号]から開始し、「[終了記号] ;」のみが存在する行の直前までを文字列として扱う。
    (前の例では、EOFを使ったが、EOMでもENDでも良い)
  • 開始の[終了記号]と終了の[終了記号]に書く文字は完全一致していなければならない。
  • 文字列の終了の[終了記号]の前にスペースを入れてはならない。
  • 文字列の終了の[終了記号]の後には「;」(セミコロン)を記述する。

ヒアドキュメントを変数に代入する

ヒアドキュメントは変数に代入することもできます。
その場合、次のように書きます。

<?php
  $str = <<< EOF
1行目です。
2行目です。
3行目です。
EOF;
  echo $str;

変数に代入しておくと、値を保持して、後の処理で使用することができます。

ヒアドキュメントの中に変数を記述する

もうひとつ応用編です。ヒアドキュメントの中に変数を組み込むこともできます。
例を示します。

<?php
  $fruit1 = 'りんご';
  $fruit2 = 'バナナ';
  $fruit3 = 'メロン';
  echo <<< EOF
赤い果物は「{$fruit1}」です。
黄色い果物は「{$fruit2}」です。
緑の果物は「{$fruit3}」です。
EOF;

上記のように変数をヒアドキュメント内に組み込むことができます。
ここで注意点ですが、ヒアドキュメント内に変数を書く時、$fruit1, $fruit2, $fruit3 だけでは直前/直後の文字内容により変数が正しく認識しないため、{$fruit1}, {$fruit2}, {$fruit3}のように変数を{ }で囲むようにしましょう。

このサンプルプログラムの実行結果は次の通りです。
(※注:このサンプルプログラムはHTMLの改行<br>ではなく、文字列の改行「\n」を使っているので、ブラウザの「HTMLソースを表示」機能を使って、HTMLソースで確認してください。)

赤い果物は「りんご」です。
黄色い果物は「バナナ」です。
緑の果物は「メロン」です。

ヒアドキュメントを使用しない記述方法

複数行の文章を出力するのは、実はヒアドキュメントを使わなくてもできます。
PHPは、PHPタグ「<?php 〜 ?>」に囲まれた範囲がプログラム処理をする範囲ですが、PHPタグの範囲外はプログラムではなくそのまま出力する文字列(テキスト)になるからです。
よって、一つ前のサンプルプログラムをヒアドキュメントを使わずに次のように書くことができます。

<?php
  $fruit1 = 'りんご';
  $fruit2 = 'バナナ';
  $fruit3 = 'メロン';
?>
赤い果物は「<?php echo $fruit1; ?>」です。
黄色い果物は「<?php echo $fruit2; ?>」です。
緑の果物は「<?php echo $fruit3; ?>」です。

だから、ヒアドキュメントは、プログラマーによりますが、あまり使われないかもしれません。
ただ、ヒアドキュメントを使うと便利な場合、またプログラムソースの可読性(読みやすさ)が良くなる場合もありますので、存在は知っておいた方が良いと思います。

文字列出力の短縮した記述方法

<?php echo 'メッセージ'; ?>

の記述は頻繁に使用するため、PHPでは次のような短縮した記述方法が用意されています。

<?= 'メッセージ'; ?>

この記述方法を使用すると、ひとつ前のサンプルプログラムは次のように書くことができます。

<?php
  $fruit1 = 'りんご';
  $fruit2 = 'バナナ';
  $fruit3 = 'メロン';
?>
赤い果物は「<?= $fruit1; ?>」です。
黄色い果物は「<?= $fruit2; ?>」です。
緑の果物は「<?= $fruit3; ?>」です。

便利な書き方ですので、覚えておきましょう。

おわりに

文字列の結合はよく使うので慣れておきましょう。
ヒアドキュメントという記述方法がありますが、ヒアドキュメントを使わなくても記述することができますので、あまり使わないかもしれません。
プログラムの読みやすさなどを考えて、適した記述方法を使うと良いと思います。

PHPプログラミング入門講座 〜 全記事一覧 〜

-PHP, PHP入門講座, プログラミング
-, , , ,

Copyright© ハッピー・プログラミング・ライフ , 2020 All Rights Reserved.