テキストについて
PHPはテキスト処理もとくいとする言語です。そもそも、PHPの基本的な動作が「Webサーバ上でHTMLのテキストを動的に生成すること」であることを考えれば納得がいきます。ここでは、「文字列」を中心に紹介します。どんな方法で文字列を表すのか、そのエスケープ方法について、また、ヒアドキュメントの記述方法を紹介します。
・文字列の記述方法
・文字列のエスケープについて
・ヒアドキュメントについて
・Nowdocについて
・文字列の記述方法まとめ
文字列の記述方法
PHPで文字列を出力するには、いくつかの方法があります。はじめに最もよく使われる引用符を使った記述方法を紹介します。以下のように引用符'…'や"…"を使用して文字列を表現できます。
<?php
echo 'サンプル表示1';
echo "サンプル表示2";
しかし、この2つの表記方法には明確な違いがあります。二重引用符の文字列では、文字列中に変数名(例:$val)を書くと、その変数の内容が展開されるようになっているのに対して、単一引用符の文字列では、展開されず、そのままが表示されます。
<?php
$val = "変数に格納してみました。";
echo 'サンプル表示1 $val'; // 変数が展開されない
echo "サンプル表示2 $val"; // 変数が展開される
出力結果
サンプル表示1 $val
サンプル表示2 変数に格納してみました。
また、変数の展開を行うとき、より明確な変数名を指示するために、変数名を{$val}のように波括弧で囲むこともできます。変数名の後に空白などを入れないと正しく変数名を認識しない場合があるのですが、波括弧で囲むことにより確実に変数の展開を指定できます。
<?php
$age = 29;
echo "年齢:{$age}";
出力結果
年齢:29
文字列のエスケープについて
文字列の中に、引用符を表示する方法について考えてみます。文字列は、引用符から始まって引用符で終わります。そのままでは、引用符を表示することはできません。
文字列中で引用符を表示するには、引用符の前にバックスラッシュ「\」(日本語フォント・OS環境によっては、円記号になります)を記述します。このように、その後の文字を特別扱いするように指示する文字(つまりバックスラッシュ)を「エスケープ文字」と呼びます。
<?php
echo 'It\'s my presure.';
echo "He said, \"Hello!\"";
出力結果
It's my presure.
He said, "Hello!"
ちなみに、文字列中でエスケープ文字を表示したいときには「\\」のようにエスケープ文字を2つ重ねます。
■ 二重引用符での特殊文字集合について
二重引用符で囲まれた文字列の中では、エスケープ文字と組み合わせて、より多くの意味を持たせることができます。以下のように「\n」では改行を意味し、「\x40」ではASCIIコードで0x40、すなわち「@」の文字を意味します。
二重引用符での特殊文字集合
\n ・・・・・・ 改行(ASCIIコード 10)
\r ・・・・・・ 復帰(ASCIIコード 13)
\t ・・・・・・ タブ(ASCIIコード 9)
\\ ・・・・・・ 文字「\」を表す
\$ ・・・・・・ 文字「$」を表す
\" ・・・・・・ 文字「"」を表す
\' ・・・・・・ 文字「'」を表す
\0 .. \77 ・・ 8進数でASCII文字を表す
\x0 .. \xFF ・・ 16進数でASCII文字を表す
<?php
// タブと改行のテスト
echo "Name \t Point\n";
echo "---- \t ----\n";
echo "Jack \t 30\n";
echo "Ripper \t 100\n\n";
// ASCIIの表示テスト
echo "mail : test\x40serverwiki\x2enet\n\n";
// 変数の埋め込みテスト
$age = 30;
echo "\$ageの値 = $age\n";
出力結果
Name Point
---- ----
Jack 30
Ripper 100
mail : test@serverwiki.net
$ageの値 = 30
ヒアドキュメントについて
PHPには、少し長い文章やHTMLコードの出力に便利な「ヒアドキュメント」とという構文があります。これは「<<<」に続いて任意の終端ワードを指定し、次に終端ワードが出てきたところまでを文字列を指定することができます。
[書式]ヒアドキュメント
echo <<< 終端ワード
... 文字列 ...
... 文字列 ...
終端ワード;
例、ヒアドキュメントの終端ワードに「_WORD_」という記号を使って文章を表示させます。
<?php
echo <<<_word_
文字列を表示しています。
文字列を表示しています。
文字列を表示しています。
_word_;
出力結果
文字列を表示しています。
文字列を表示しています。
文字列を表示しています。
■ ヒアドキュメントへの変数展開について
ヒアドキュメントは、二重引用符の文字列と同じ意味を持ちます。そのため、変数の展開なども行われます。また、echoで文字列を出力するだけでなく、変数に文字列を代入することも可能です。
<?php
$name = "Serverwiki";
$age = 29;
$comment = <<<_word_
文字列を表示しています。
文字列を表示しています。
文字列を表示しています。
name:{$name}
age:{$age}
_word_;
echo $comment;
出力結果
文字列を表示しています。
文字列を表示しています。
文字列を表示しています。
name:Serverwiki
age:29
Nowdocについて
文字列の変数展開がない(単一引用符と同じ動作をします)ヒアドキュメントが「Nowdoc」です。記述方法はほどんとヒアドキュメントと同じです。違うのは、「<<<」に続けて終端ワードを単一引用符で囲むこと、そして文字列ないの変数などのバース処理が行われないという部分です。そのため変数を表す「$」やエスケープ文字などを含む長文を表示したいときに便利です。
<?php
$name = "Serverwiki";
$age = 29;
$comment = <<<'_word_'
文字列を表示しています。
文字列を表示しています。
文字列を表示しています。
name:{$name}
age:{$age}
_word_;
echo $comment;
出力結果
文字列を表示しています。
文字列を表示しています。
文字列を表示しています。
name:{$name}
age:{$age}
文字列の記述方法まとめ
文字列を表す方法を以下にまとめました。
文字列の記述方法
単一引用符 '…'
限られたエスケープのみ
二重引用符 "…"
変数の展開、特殊文字集合の変換あり
ヒアドキュメント構文 <<<終端ワード … 終端ワード
二重引用符と同じ展開あり
Nowdoc構文 <<<'終端ワード' … 終端ワード
単一引用符のように展開なし