リテラル(literal)は、「文字どおり」「字義どおり」を意味する言葉で、プログラミングにおいては計算結果などが反映される変数と違って「最初からその内容と決めておく」ものとして使われるものである。PHPにおいて文字列をリテラルとして扱うとはどういう事なのかを紹介しよう。
文字列リテラル
PHPにおける文字列リテラル
PHPにおける文字列は、可変長文字列であり、その他のプログラミング言語にあるようなchar型といった「単の一文字」は存在しない。
例えると、文章と単語を区別して扱う必要がないということだ。
文字列リテラルは大きく3つある。
ひとつは、シングルクオートによるもの、もうひとつはダブルクオートによるもの、そして最後にヒアドキュメントによる方法を説明していこう。
シングルクオートによる表現
「‘」によって、文字列を表すことが出来る。
1 2 3 |
<?php $str = 'これが文字列'; echo $str; |
結果は下記のようになる。
ではもう少し実用的な例をみていこう。
いくつかの文字列を結合して出力したい場合があるだろう。
例えば、「PHPレッスン:文字列リテラル」と出力したいとして、下記のようなスクリプトを書いたとする。
1 2 3 |
<?php $str = '文字列リテラル'; echo 'PHPレッスン: $str'; |
結果はこのようになる。
あいにく、「‘」シングルクオートによる文字列リテラル表現では、変数と文字列とは一緒に表示することが出来ない。
シングルクオートはあくまでも、文字列のみか、変数のみか、その2択となる。
では上記のようなことを実現したい場合は、どうすればよいだろうか?
ダブルクオートによる表現
実は、PHPでは「”」ダブルクオートによる文字列リテラルの表現も可能だ。具体的な例をみてみよう。
1 2 3 |
<?php $str = '文字列リテラル'; echo "PHPレッスン: $str"; |
結果はこのようになる。
さきほどのシングルクオートでは実現できなかった、文字列と変数の一緒の表示が出来た。
見ての通り、ダブルクオートによる文字列リテラルには、シングルクオートにはない下記の機能がある。
- 文字列中の変数展開
- エスケープ文字の展開
ヒアドキュメントによる表現
実際の現場では、もっと複雑な文章を出力することになるだろう。
そうした時に、いちいちシングルクオートやダブルクオートで出力させていると、プログラムの記述量が増え、一覧性も悪くなってしまう。
そうした場合に活用できるのがヒアドキュメントと呼ばれる文字列リテラルだ。
1 2 3 4 5 6 |
<?php $mydream = "たくさんのプログラムを書いて世の中に貢献すること"; $myinfo = <<<EOD はじめまして。私の夢は{$mydream}です。よろしくお願いします。 EOD; echo $myinfo; |
結果は下記のようになる。
このプログラムについて説明しよう。
まず、$mydreamという変数に具体的な「夢」についての文章をセットする。
次にEODという文字が2つある。
これがヒアドキュメントで、具体的には、
<<<EOD から EOD; で囲われた範囲をまるごと、文字列表現としてセットすることが出来る。
今回の例だと、「はじめまして」から「よろしくお願いします。」までだ。
ヒアドキュメントそのものは、出力する機能はないため、その文字列のセットを$myinfoという文字列にセットする。
そして最後にechoにて$myinfoの変数の中身を出力している。
ここでのポイントとしては、「 私の夢は{$mydream}です 」の部分だ。
ダブルクオートのところで、文字列と変数との一緒の出力は「“」ダブルクオートで囲んでいれば展開されて出力されると説明したが、少し注意も必要だ。
たとえば、下記のような場合だ。
1 2 3 |
<?php $str = "abc"; echo "$strdef"; |
この場合、出力結果は 白紙 になる。
なぜだろうか?
よく見てみてほしい。
1 |
echo "$strdef"; |
プログラムを作成した本人ならば、分かるかもしれないが、プログラムを解釈する側には、どこまでが変数で、どこからが変数ではない通常の文字列が分からないのだ。
こういう場合は、きちんと解釈してもらえるようにわかりやすくする方法がある。それが「{ }」 で変数を囲むという方法になる。
1 2 3 |
<?php $str = "abc"; echo "{$str}def"; |
これでようやく正しく出力された。
ちなみに、ヒアドキュメントを使う場合の注意事項は下記の通り。
- <<<に続く終端識別子は直前に空白などは含めない
- 終端識別子を記載したらすぐに改行すること
以上がPHPによる文字列リテラルになる。
まとめ
PHPプログラミングでメッセージを出力する際に、一部に変数を含む文章などを出力するような場面が何度も出てくるだろう。本記事中で紹介したヒアドキュメントなどを活用してみてほしい。