業務アプリ開発講座

PHPの文字の扱い方法

PHPの文字

Webアプリは最終的には文字列を生成するものだということを以前に書きました。その「文字」には、プログラミングにおいて、2種類の型が存在します。characterstringです。characterは文字一つ一つ、つまり、「a」とか「あ」という一つも文字を指し、stringはそれら文字が連なった状態のものつまり、「abc」とか「あいう」を指します。それら文字の型の表現方法が言語よって様々な違いがあります。

例えばC#では、 character型の値を用いる場合、char型を宣言し値を'シングルクォートで囲みます。

char a = 'b';

文字列型は、"ダブルクォートで囲みます。

string a = "abc";

また下記のようなメソッドがあったとします。

bool IsMatch(char a){}

これを呼び出す際に

if(IsMatch("x"))

と書くと型不一致でエラーになります。メソッドは引数にcharを指定していますが、渡された引数がstring型になっているからです。

PHPはどうかと言いますと、型宣言がありませんので、characterstringを区別していません。どちらも文字列として扱います。しかもPHPは値として文字列を囲む場合'シングルクォートと"ダブルクォート、どちらも使えます。どちらで囲っても正しく文字列になります。しかし、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;

ただ、いくら自由に決められるとはいえ、ソースの可読性が悪くなりますのでプロジェクトないいでは統一しておいたほうが良いでしょう。

そして、このヒアドキュメントは"ダブルクォートと同じように値は式として機能します。ですので、変数を直接埋め込むことができます。