第5章 変数とデータ型

5.3 文字列について知っておこう

文字列はプログラム内で一番扱う機会の多いデータになります。文字列の仕組みを知っておくことが、PHPプログラミングでは重要になります。ここでは、文字列に関するさまざまな用法について学習していきます。

5.3.1 文字列を表す囲みの違いについて

文字列を表すには「'(シングルクォーテーション)」と「”(ダブルクォーテーション)」で囲む2種類の方法があります。この2つのクォーテーションには、以下に示すプログラムの動作に違いが出ます。

  • エスケープシーケンスの利用
  • 変数の展開

次の項から、この処理動作について詳しく説明していきます。

5.3.2 エスケープシーケンスについて

エスケープシーケンスとは、プログラムの中で普通に扱えない文字を利用できるようにした、特殊な文字のことをいいます。
このエスケープシーケンスは基本的にダブルクォーテーションに囲まれた文字列内で利用することができます。逆にシングルクォーテーション内では2つ(以下表の※1)を除いて使えないようになっています。
主なエスケープシーケンスを表5.3.1で紹介します。

表 5.3.1:主なエスケープシーケンス

※1:シングルクォーテーション内でも使えるエスケープシーケンス
※2:\と\は、意味は同じで見た目が異なります。環境により使用できる記号が異なります。

エスケープシーケンスは「\(エン)」記号との組み合わせで表現します。
では、どのような場合にこのエスケープシーケンスを使うか説明していきます。

例えば文字列の「”今日は最高にいい天気でした!”」の中で「”(ダブルクォーテーション)」を利用したい場合を考えてみます。先ほどの文字列の「いい天気」の前後にダブルクォーテーションを入れてみます。

上記のように「” “で囲まれた文字列」の中で「”」を文字として使おうとすると、プログラムでは文字列の囲みなのか文字なのか判断ができません。実際にこのプログラムを作成して実行するとエラーになってしまいます。


図 5.3.1: 「” “」囲みの文字列内でエスケープシーケンスを利用しないで実行するとエラー

そこで先程紹介した「\”」のエスケープシーケンスを利用します。


図 5.3.2: 「” “」囲みの文字列内でエスケープシーケンスを利用すると正しく動作する

上記で示したようにエスケープシーケンスは「”(ダブルクォーテーション)」で囲まれた文字列の中で使用します。ただし例外があり、「\’」は”で囲まれた文字列内では使いません。

また'(シングルクォーテーション)で囲まれた文字列の中では、「\’」と「\\」の2つのエスケープシーケンスが使えます。この2つを除いては’囲み内はエスケープシーケンスがなくても文字として認識してくれます。


図 5.3.3: 「’ ‘」囲みの文字列内で利用できるエスケープシーケンス

基本的にエスケープシーケンスは、1部の例外を除いてダブルクォーテーションで囲まれた文字列内で利用できます。表5.3.1で示した例の中の「\’」、「\”」、「\\」の使い方はこれまでの例で見せてきました。残りのエスケープシーケンスで覚えておいたほうがよい「\n(改行)」についてのプログラムを紹介します。

エスケープシーケンスを利用するプログラム

エスケープシーケンスを利用し、その結果をWebブラウザに表示して確認してみましょう。

ソース・フォルダー: myproj_intro/ch05
パッケージ: useEscapeSequence.php
アクセスURL:http://localhost/myproj_intro/ch05/useEscapeSequence.php

useEscapeSequence.php

実行結果

※環境により、「\」が「\(バックスラッシュ)」で表示される場合がありますが、意味に違いはありません。

解説

このプログラムは5.1.4項のvariable.phpのプログラムに、貯金の目標を追加したプログラムになっています。実行結果を見ただけでは、「\」記号がエスケープシーケンスで表示されているだけで、見た目はこれまでと一緒のように見えます。今回利用した「\t」と「\n」はなんだったのか疑問に思ったのではないでしょうか。その答えは出力されたHTMLのソースコードにあります。
「ページ上で右クリック→ページのソースを表示」を選択してHTMLのソースコードを表示してみます。図5.3.4のブラウザ出力のソースコードを見ると綺麗に揃っているのが確認できます。
ここでも「\t」と「\n」は見えるものではありませんが、2つのエスケープシーケンスがどのようなものなのか思い出すと、「\t:水平タブ」(決まった長さ分スペースをあける)、「\n:改行」となっています。
「<br>」がHTMLの出力結果を改行するもので、「\n」はHTMLソースコードを改行するものになります。「\t」も当然HTMLソースコードのスペースを空けるものになります。


図 5.3.4: エスケープシーケンスを利用したプログラムのHTMLソースコードを表示

「\\、\$、\’、\”」は記号として使いたい場合に利用し、「\n、\t」等はHTMLのソースコードの見た目を整えるために利用します。

実際にエスケープシーケンスを利用していないプログラムは、ブラウザでの出力結果は変わりませんがHTMLのソースコードを確認すると少し見づらいものになってしまいます。
先程作成したuseEscapeSequence.phpの、エスケープシーケンスを利用しないプログラムを以下の図5.3.5に示しますので違いを確認してください。


図 5.3.5: エスケープシーケンスを利用していないプログラムのHTMLソースコードを表示

ポイント
  • エスケープシーケンスは例外を除いて、ダブルクォーテーションで囲まれた文字列内で利用する。
  • 「\’」はダブルクォーテーション囲みでは使えない。
  • シングルクォーテーションで囲まれた文字列内では、「\’」と「\\」のみ利用可能、
  • 「\t」、「\n」はHTMLソースコードの見た目を揃えるために利用する。

5.3.3 変数の展開について

ダブルとシングルのクォーテーションで囲まれた文字列の違いには、エスケープシーケンスの利用以外にもう1つあります。それは「変数の展開」についてです。
変数の展開とは「” “」で囲まれた文字列の中で変数を利用すると、変数の中の値を出力してくれる処理のことをいいます。「’ ‘」で囲まれた文字列の中ではこの機能が利用できないようになっています。

書式:変数の展開

「” “」で囲まれた文字列の中に「{$変数名}」と記述すれば変数の展開が行えます。

凡例:変数の展開

では変数の展開が出来るのかプログラムで実際に確認してみましょう。

変数の展開を利用するプログラム

シングルとダブルの2種類のクォーテーションで囲まれた文字列の中で、変数の展開の動作が違うことをWebブラウザに表示して確認してみましょう。

ソース・フォルダー: myproj_intro/ch05
パッケージ: variableExpansion.php
アクセスURL:http://localhost/myproj_intro/ch05/variableExpansion.php

variableExpansion.php

実行結果

解説

5行目ではシングルクォーテーションで囲まれた文字列の中に変数$ageの展開を行い、その結果を変数$output1に代入しています。

6行目ではダブルクォーテーションで囲まれた文字列の中に変数$ageの展開を行い、その結果を変数$output1に代入しています。

15、17行目で5、6行目で用意した変数をWebブラウザへ出力処理を行っています。

実行結果をみても分かるように、シングルクォーテーションで囲まれた文字列の中では変数の展開は行えず、記述した内容「{$age}」がそのまま表示されています。逆にダブルクォーテーションで囲まれた文字列の中では、「26」と変数の値が正しく展開されているのが確認できます。


図 5.3.6: ダブルクォーテション囲み文字列の中の変数の展開

シングルとダブルクォーテーションで囲まれた文字列では、動作に違いがあるのことが学習できました。基本的にはどちらの囲み文字列を使っても問題はありません。エスケープシーケンスや変数の展開を利用したい時に、ダブルクォーテーションで囲まれた文字列を利用するようにしてください。

ポイント
  • ダブルクォーテーションで囲まれた文字列内では変数の展開が行える。逆にシングルクォーテーションで囲まれた文字列内では変数の展開は行えない。

5.3.4 ヒアドキュメントついて

文字列を作る別の方法に、「ヒアドキュメント」という機能があります。ヒアドキュメントを使うと、複数行の文字列の記述が簡単に行えるようになります。
まずはヒアドキュメントの構文を以下に示します。

書式:ヒアドキュメント

■ヒアドキュメントのルール

① ヒアドキュメントを利用するには、開始と終了を識別する任意の文字列で囲む。
② 開始と終了の文字列は変数と同じ命名規則に従い、同じ名前を付ける必要がある。
③ 開始文字列は、<<<(小なり記号3つ)に続けて開始文字列を記述し、必ず改行を行う。
④ 開始文字列と終了文字列に囲まれたデータは全て文字列になる。
⑤ 変数の展開やエスケープシーケンスが利用できる。
⑥ 「” “」で囲まれた文字列と違い、エスケープシーケンスを利用しなくてもタブや改行が反映される。
⑦ 終了文字列の前にはスペースを空けずに「;(セミコロン)」で終わり、必ず改行を行う。

凡例:ヒアドキュメント

上記凡例のようにこれまでの文字列のように変数に代入することも、直接画面に出力して利用する方法で扱えます。

では実際に、ヒアドキュメントを利用したプログラムを見てみましょう。

ヒアドキュメントを利用するプログラム

ヒアドキュメントを利用した文字列を、Webブラウザに表示して確認してみましょう。

ソース・フォルダー: myproj_intro/ch05
パッケージ: hereDocument.php
アクセスURL:http://localhost/myproj_intro/ch05/hereDocument.php

hereDocument.php

実行結果

解説

3~10行では各変数に値を代入しています。

13~17行目でヒアドキュメントを利用して、複数行に渡る文字列を変数$outputに代入しています。当然変数の展開も行え、エスケープシーケンスの利用も行えています。

13行目の開始IDの後は必ず改行を行い、17行目の終了IDの先頭は空けずにセミコロンで終了して改行します。このルールを必ず守らないと、ヒアドキュメントは利用できないので注意が必要です。後は通常の””で囲まれた文字列と同じように利用できます。

25~27行目の処理で変数$outputを出力することで、これまでのように実行結果を正しく表示することができます。

またHTMLのソースコード側もエスケープシーケンスを使ってない部分でも、改行やタブが有効になっていてきれいに整えることができます。エスケープシーケンスを利用しても当然行えます。両方の機能をうまく利用して綺麗なHTMLソースコードを記述しましょう。


図 5.3.7: ヒアドキュメント文字列のHTMLソースコードの確認

ポイント
  • ヒアドキュメントを利用して、複数行に渡る文字列を作成することができる。
  • 変数の展開や、エスケープシーケンスの利用といった””で囲まれた文字列の特性に近い機能を持っている。
  • ヒアドキュメントを利用した文字列の中では、改行やタブがそのままHTMLソースコードに反映される。

NEXT>> 5.4 特別な変数について