PHPの文字
Webアプリは最終的には文字列を生成するものだということを以前に書きました。その「文字」には、プログラミングにおいて、2種類の型が存在します。character
とstring
です。character
は文字一つ一つ、つまり、「a」とか「あ」という一つも文字を指し、string
はそれら文字が連なった状態のものつまり、「abc」とか「あいう」を指します。それら文字の型の表現方法が言語よって様々な違いがあります。
例えばC#では、 character
型の値を用いる場合、char
型を宣言し値を'
シングルクォートで囲みます。
char a = 'b';
文字列型は、"
ダブルクォートで囲みます。
string a = "abc";
また下記のようなメソッドがあったとします。
bool IsMatch(char a){}
これを呼び出す際に
if(IsMatch("x"))
と書くと型不一致でエラーになります。メソッドは引数にchar
を指定していますが、渡された引数がstring
型になっているからです。
PHPはどうかと言いますと、型宣言がありませんので、character
とstring
を区別していません。どちらも文字列として扱います。しかもPHPは値として文字列を囲む場合'
シングルクォートと"
ダブルクォート、どちらも使えます。どちらで囲っても正しく文字列になります。しかし、PHPではシングルクォートとダブルクォートで機能に特徴的な違いがあります。
シングルクォートとダブルクォ−トの違い
どういうことかと言いますと、例えば、PHPは文字列の中の変数名を直接埋め込むことができるのですが、下記のように文字列をシングルクォートで囲んだ場合、
$a = 'あいう'; $b = '{$a}えお'; > {$a}えお
となり、シングルクォートで囲んだ文字列がそのまま出力されます。ではダブルクォートで囲った場合の出力はどうかと言いますと、
$b = "{$a}えお"; > あいうえお
と、変数部分が変換されます。
プログラミングで、文字列中に改行コードを埋め込む場合など\n
を改行コードの代替文字(エスケープシーケンスという)を用いますが、これもダブルクォートで囲んだ文字列中でないとちゃんと改行コードとして認識されません。
この埋め込み変数の記述方法ですが、PHPはとても柔軟性があって(柔軟性がありすぎで個人的にあまりいいことではないように思えるのですが)
$a = 'あいう'; $b = "{$a}-えお"; $c = "$a-えお";
変数$b
も$c
も同じように「あいう-えお」と出力されます。ただ変数を波カッコで囲まない記述方法はいくつか作法がありまして、記述の仕方によってはうまく出よくされないケースもあります。ですので、変数を直接埋め込む方法は波カッコで囲む方法で統一することをお勧めします。
文字列の連結
複数の文字列を連結して一つの文字列に加工する場合、PHPでは.
ドットを結合文字に使用します。例えば、
$a = 'あいう'; $b = 'えお'; $c = $a . $b; echo $c; > あいうえお
となります。他の多くの言語は+
を用いて文字列を連結するのですが、PHPではドットを用います。
さて、この文字列連結ですが、短い文ならいざ知らず長い文章をいちいちドットやプラスで連結するのは冗長ですね。
$a = 'abc' . 'def' . 'ghi' . 'jkl' . 'mno' . 'pqr';
そこで、このように1行1行連結するのではなく、一挙に文を記述する方法が以下に示すヒアドキュメントという記述方法をもいいます。
ヒアドキュメント
PHPにはもう一つの文字列の表現方法としてヒアドキュメントという手法があります。他の言語にも同類の記述方法があります。
PHPが特徴的なところが囲み文字を自分で指定できることです。それが特別便利かどうかはわかりませんが、とにかく任意に指定できます。
$a = <<<EOD あいうえお かきくけこ EOD;
ここの例に書かれている[EOD]という文字、なんとなく意味ありげに見えますが[EOD]には意味がありません。この[EOD]部分を好きに指定することができるわけです。
使える文字は下記を1文字以上
- 大小のアルファベット
- 数字
- _ (アンダースコア)
記述ルールは以下の通りです。
=
右辺に<<<
- 続いて任意の文字(IDと言います)
- 値となる文字列
- 最後にID(最後のIDは独立した行にし、IDの前には何も記述してはならない)
ですのでこのような書き方もできます。
$a = <<<_ _; $b = <<<Yahoo Yahoo;
ただ、いくら自由に決められるとはいえ、ソースの可読性が悪くなりますのでプロジェクトないいでは統一しておいたほうが良いでしょう。
そして、このヒアドキュメントは"
ダブルクォートと同じように値は式として機能します。ですので、変数を直接埋め込むことができます。