PHPにおいて、文字列(テキスト)の操作は非常に重要です。例えば、ユーザーからの入力を処理する場合や、データベースの情報を整形して表示する場合、HTMLを動的に組み立てる場合など、さまざまな場面で活用されます。ここでは、PHPにおける文字列の扱い方を順を追って解説していきます。
テキストの記述方法
まずは、PHPでの文字列の基本的な記述方法について確認しましょう。PHPでは以下のように、シングルクォーテーションとダブルクォーテーションを用いて文字列を表現します。
- シングルクォーテーション(
''
) - ダブルクォーテーション(
""
)
PHPはこれらの記述を区別して処理を行うため、どちらを使うかによって文字列の扱われ方が変わる点に注意が必要です。
文字列の記述方法
文字列を代入するだけなら、基本的に以下の2通りの書き方を使います。
<?php// シングルクォーテーション
$text1 = 'こんにちは';
// ダブルクォーテーション
$text2 = "こんにちは";
?>
一見するとどちらも同じように使えますが、中身の処理が若干異なるため、次に説明する引用符の違いを理解しておきましょう。
引用符: シングルクォーテーションとダブルクォーテーションの違い
文字列の扱い方を正しく理解するには、シングルクォーテーションとダブルクォーテーションの違いを把握することが大切です。
単一引用符(シングルクォーテーション)
- 変数展開をしない: 文字列の中で
$変数名
を書いても、そのまま文字列として扱われます。 - エスケープが必要になる文字が少ない: 基本的には、シングルクォーテーションとバックスラッシュ(\)のみエスケープが必要です。
- 文字通りに解釈される: 特殊文字(例:
\n
など)も通常はそのまま表示されます。
サンプルコード:
<?php
$name = '太郎';
// シングルクォーテーション内の変数は展開されず文字列として表示
echo 'こんにちは、$name さん<br>';
// シングルクォーテーション内で ' を使う場合はエスケープ
echo 'I\'m a PHP developer!';
?>
出力結果:

二重引用符(ダブルクォーテーション)
- 変数展開を行う: 文字列に
$変数名
が含まれていると、変数の値が自動的に展開されます。 - 特殊文字シーケンスを解釈する:
\n
(改行)や\t
(タブ)など、エスケープシーケンスを文字列内で使えます。
サンプルコード:
<?php
$name = '太郎';
// 二重引用符内では変数が展開される
echo "こんにちは、$name さん<br>";
// 特殊文字シーケンスが解釈される例
//ブラウザでソースコードを開くと、\nの改行が反映されている
echo "1行目\n2行目";
?>
出力結果:


文字列のエスケープ
PHPでは、文字列を''
(シングルクォーテーション)や""
(ダブルクォーテーション)で囲んで記述します。このとき、文字列内で同じクォーテーションやバックスラッシュ\
を使うと、それが文字列の終端や特別な記号として解釈されてしまい、文法エラーの原因になります。
これを防ぐためには、「エスケープ」と呼ばれる仕組みを使い、これらの記号の直前にバックスラッシュ\
を付けて、PHPに「次の文字はただの文字として扱うように」と伝える必要があります。
サンプルコード:
<?php
// ダブルクォーテーション内でダブルクォーテーションを表示したい場合
echo "He said, \"Hello!\"";
// シングルクォーテーション内でシングルクォーテーションを表示したい場合
echo 'It\'s a wonderful day!';
?>
出力結果:

このように、エスケープを使うことで正しく文字列として扱うことができます。
二重引用符での特殊文字集合
二重引用符の中では、PHPが解釈する特殊文字(エスケープシーケンス)を利用できます。代表的なものとして、改行やタブなどが挙げられます。
二重引用符での特殊文字集合一覧サンプル
\n
: 改行\t
: 水平タブ\\
: バックスラッシュ自身\"
: ダブルクォーテーションを文字として表示
サンプルコード:
<?php
echo "改行を含む文字列\nここから改行後のテキストです<br>";
echo "タブ\tを含む文字列<br>";
echo "バックスラッシュを表示します: \\<br>";
echo "ダブルクォーテーションを表示します: \"<br>";
?>
出力結果:


これらを活用することで、HTMLやログなどのテキスト出力を整形しやすくなります。
ヒアドキュメント構文
ヒアドキュメント(Heredoc)は、複数行にわたる長い文字列をスッキリと書ける構文です。以下のように、<<<
の後に識別子(例えば EOD
)を記述し、その識別子を行頭で再度書くまでのテキストをすべて文字列として扱います。
基本的な書き方:
<?php
$text = <<<EOD
複数行の文字列を
そのまま記述できます。
文字列内には "ダブルクォーテーション" も含められます。
EOD;
echo $text;
?>
出力結果(ソースコード):

ヒアドキュメントは、ダブルクォーテーションと同様に変数展開やエスケープシーケンスの解釈が行われます。
ヒアドキュメントでの変数の展開
ヒアドキュメントでは、文字列内に $変数名
を書くと、自動的に変数の値が展開されます。
<?php
$name = '花子';
$message = <<<EOT
こんにちは、$name さん。
今日はいい天気ですね。
EOT;
echo $message;
// 出力結果:
// こんにちは、花子 さん。
// 今日はいい天気ですね。
?>
この仕組みにより、HTMLコードや長い文章の中に変数を簡単に埋め込むことができるため、柔軟に文字列を生成できます。
Nowdoc構文
Nowdoc構文は、ヒアドキュメント構文と似ていますが、こちらはシングルクォーテーションのルールで文字列を扱います。つまり、変数展開やエスケープシーケンスの解釈が行われません。コード例など、文字列をそのまま表示させたいときに便利です。
書き方の例:
<?php
$text = <<<'EOD'
Nowdoc構文では、$name は展開されず、
そのまま $name と表示されます。
EOD;
echo $text;
// 出力結果:
// Nowdoc構文では、$name は展開されず、
// そのまま $name と表示されます。
?>
Nowdoc構文では、記述したとおりの文字列がそのまま出力されます。ヒアドキュメントと比べて、余分な置換や解釈を避けたい場合に有用です。
以上がPHPでの文字列操作に関する基本的な説明です。シングルクォーテーションかダブルクォーテーション、またはヒアドキュメントやNowdocのどれを選ぶかは、コードの可読性や必要な機能(変数展開など)に応じて使い分けるのがポイントです。初心者の方はまずはシンプルな方法から慣れていき、必要に応じてヒアドキュメントやNowdocを活用するとよいでしょう。