PHP - 文字列

文字列

文字列 (string) は、文字が連結されたものです。文字列リテラルは、以下の 4 つの方法で指定することが可能です。

  • 引用符
  • 二重引用符
  • ヒアドキュメント構文
  • Nowdoc 構文

引用符で文字列を指定する方法は、もっとも簡単な方法です。引用符をリテラルとして指定するには、バックスラッシュ付きの \' でエスケープします。バックスラッシュをリテラルとして指定するには、\\ とします。

上記以外のバックスラッシュは、すべてバックスラッシュそのものとして扱われます。つまり、\r\n といったエスケープシーケンスを書いても、書いたままの形式で出力されます。

<?php
  echo 'this is a simple string';
?>
文字列リテラル

文字列が二重引用符 " で括られた場合は、変数名が展開され、以下のエスケープシーケンスを特殊な文字として解釈します。

  • \n: ラインフィード (LF またはアスキーの 0x0A (10))
  • \r: キャリッジリターン (CR またはアスキーの 0x0D (13))
  • \t: 水平タブ (HT またはアスキーの 0x09 (9))
  • \v: 垂直タブ (VT またはアスキーの 0x0B (11))
  • \e: エスケープ (ESC あるいはアスキーの 0x1B (27))
  • \f: フォームフィード (FF またはアスキーの 0x0C (12))
  • \\: バックスラッシュ
  • \$: ドル記号
  • \": 二重引用符

文字列を区切る別の方法としてヒアドキュメント構文 <<< があります。ヒアドキュメント構文では ID と、それに続けて改行文字を <<< の後に指定し、文字列を置いた後で、同じ ID を括りを閉じるために置きます。

<?php
$bar = <<<EOT
ここでは「EOT」がIDになります。
EOT;

echo $bar; // ここでは「EOT」がIDになります。
?>
ヒアドキュメント構文

ヒアドキュメント構文では、終端 ID がある行には、セミコロン ; 以外の他の文字が含まれていてはならないことに注意しましょう。これは、特に ID はインデントしてはならないということ、セミコロンの前に空白やタブを付けてはいけないことを意味します。終端 ID の前の最初の文字は、使用するオペレーティングシステムで定義された 改行である必要があることにも注意を要します。これは、UNIX システムでは macOS を含め \n となります。最後の区切り文字の後にもまた、改行を入れる必要があります。

ヒアドキュメントは二重引用符を使用しませんが、二重引用符で括られた文字列と全く同様に動作します。しかし、この場合でも上記のリストでエスケープされたコードを使用することも可能です。変数は展開されますが、文字列の場合と同様にヒアドキュメントの内部で複雑な変数を表わす場合には注意が必要です。

<?php
$name = 'MyName';

echo <<<EOT
My name is "$name".
EOT;

// My name is "MyName".
?>
ヒアドキュメント構文

Nowdoc はヒアドキュメントと似ていますが、ヒアドキュメントがダブルクォートで囲んだ文字列として扱われるのに対して、Nowdoc はシングルクォートで囲んだ文字列として扱われます。Nowdoc の使用方法はヒアドキュメントとほぼ同じですが、その中身についてパース処理を行いません。PHP のコードや大量のテキストを埋め込む際に、エスケープが不要になるので便利です。

Nowdoc の書き方は、ヒアドキュメントと同じように <<< を使用します。そして、その後に続く識別子をシングルクォートで囲んで <<<'EOT' のようにします。ヒアドキュメントの識別子に関する決まりがすべて Nowdoc の識別子にも当てはまります。特に終了識別子の書き方に関する決まりに注意しましょう。

<?php
echo <<<'EOD'
Example of string spanning multiple lines using nowdoc syntax.
Backslashes are always treated literally,
e.g. \\ and \'.
EOD;

/*
Example of string spanning multiple lines using nowdoc syntax.
Backslashes are always treated literally,
e.g. \\ and \'.
*/
?>
Nowdoc 構文

文字列の連結

PHP で文字列を連結するには . を使用します。

<?php
  echo "Hello," . " World!" // Hello, World!
?>
文字列の連結

文字列の連結は、変数に格納された値に対しても行うことができます。

<?php
  $hello = 'Hello,';
  echo $hello.' World!'; // Hello, World!
?>
文字列の連結

関連記事