PHPでは、ダブルクォーテーション(")で囲んだ文字列の中に変数を直接書くと、その変数の値が自動的に展開されます。これを文字列展開(変数展開、文字列補間)と呼びます。
基本的な使い方
PHP
<?php
$name = "太郎";
$age = 25;
// ダブルクォーテーション → 変数が展開される
echo "こんにちは、{$name}さん!";
echo "<br>";
echo "{$name}さんは{$age}歳です。";
echo "<br>";
// シングルクォーテーション → 変数は展開されない
echo 'こんにちは、{$name}さん!';
?>
実行結果
こんにちは、太郎さん!
太郎さんは25歳です。
こんにちは、{$name}さん!
ダブルクォーテーションでは変数が値に置き換わりますが、シングルクォーテーションではそのまま文字列として出力されます。
波括弧を使った展開
変数名の境界が曖昧になる場合は、波括弧 {} で変数名を囲みます。
PHP
<?php
$fruit = "apple";
// 波括弧なし → $fruits という変数を探してしまう
// echo "I like $fruits"; // エラーまたは空
// 波括弧あり → 正しく $fruit が展開される
echo "I like {$fruit}s"; // I like apples
// 配列の要素を展開
$user = ["name" => "太郎", "age" => 25];
echo "{$user['name']}さんは{$user['age']}歳です。";
?>
実行結果
I like apples
太郎さんは25歳です。
エスケープシーケンス
ダブルクォーテーション内では特殊文字(エスケープシーケンス)も使えます。
PHP
<?php
echo "改行→\n次の行"; // \n は改行
echo "タブ→\t区切り"; // \t はタブ
echo "ダブルクォート→\""; // \" でエスケープ
echo "バックスラッシュ→\\"; // \\ でエスケープ
echo "ドルマーク→\$var"; // \$ で変数展開を防ぐ
?>
シングル vs ダブルクォーテーションの使い分け
変数展開やエスケープシーケンスが不要な場合はシングルクォーテーションを使いましょう。パース処理がないため、わずかにパフォーマンスが良くなります。変数を埋め込む場合はダブルクォーテーションが便利です。
ドット演算子との比較
PHP
<?php
$item = "りんご";
$price = 150;
// ドット演算子(結合)
echo $item . "の価格は" . $price . "円です。";
echo "<br>";
// 文字列展開(より読みやすい)
echo "{$item}の価格は{$price}円です。";
?>
どちらも同じ結果ですが、変数の埋め込みが多い場合は文字列展開の方が可読性が高くなります。
まとめ
- ダブルクォーテーション内では変数が自動展開される(シングルクォーテーションでは展開されない)
- 変数名の境界が曖昧な場合は
{$var}のように波括弧で囲む - ダブルクォーテーションでは
\n(改行)等のエスケープシーケンスも使える - 変数展開不要な文字列にはシングルクォーテーションを使う