【PHP】変数と文字列の結合方法!引用符の違いと展開の仕方を理解しよう
この記事からわかること
- 文字列と変数の結合方法
- 変数の展開の仕方
- 単一引用符(')と二重引用符(")の違い
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
PHPで変数に値を入れた時に、echoやprintなどで出力したいことありますよね。
その際に変数の値のみ出力するなら良いですが、決められた文字列の中に値を組み込みたいことってよくあります。
今回は文字列の中に変数を組み込む方法と単一引用符と二重引用符の違いについて解説していきます。
文字列と変数を結合する方法
$var = "デザイン太郎";
echo 'こんにちは'.$var.'さん'; // 二重引用符でも可
echo "こんにちは{$var}さん"; // 二重引用符のみ
echo "こんにちは $var さん"; // 二重引用符のみ
// ヒアドキュメント→二重引用符と同義
echo <<<END
こんにちは{$var}さん
こんにちは $var さん
END;
文字列と変数を結合する方法
- 方法1: 変数の端に「.」をつける
- 方法2: 文字列を「""」で囲い変数を「{}」で囲う
- 方法3: 文字列を「""」で囲い変数を「半角空白」で囲う(?)
方法3では出力される時に囲った空白も出力( デザイン太郎 となる)されてしまいますが変数は展開されました。
方法は色々ありますが「'(シングルクォーテーション)」と「. (ドット)」を使った結合方法が、関数やスーパーグローバル変数とも結合できるので1番汎用性が高くおすすめです。
変数が展開されないNGコード
以下の方法は変数が展開されません。
$var = "デザイン太郎";
✖ echo 'こんにちは$varさん';
✖ echo "こんにちは$varさん";
PHPの単一引用符と二重引用符の違い
PHPでは文字列を指定する場合、単一引用符(シングルクォーテーション) と二重引用符(ダブルクォーテーション)を使用できます。
echo 'デザイン太郎'; // 単一引用符 ◯
echo "デザイン太郎"; // 二重引用符 ◯
ただの文字列を囲うだけであれば両者に違いはありません。しかし変数や特殊文字が入ると挙動が異なってきます。ではそれぞれの違いと挙動を確認してみましょう。
単一引用符と二重引用符で文字列を結合する
変数と文字列を結合する場合、単一引用符と二重引用符では結果が異なってきます。
$var = "デザイン太郎"; // 出力結果
echo 'こんにちは$var'; // こんにちは$var
echo "こんにちは$var"; // こんにちはデザイン太郎
単一引用符の場合は変数として認識されず「$var」という文字列として出力されています。
しかし二重引用符の場合は変数$var
として認識されるので、変数が展開され「デザイン太郎」として出力されます。
二重引用符(ダブルクォーテーション)は中にある変数を展開できるということになります。
ではこの場合はどうでしょうか?
$var = "デザイン太郎"; // 出力結果
echo 'こんにちは$varさん' // こんにちは$varさん;
echo "こんにちは$varさん" // こんにちは;
変数の後ろに文字列がある場合正しい結果が得られなくなりました。↑上のコード表現だと変数として認識されていそうですが実際の場合は下画像のように「$var」以降の文字が全て変数として認識されてしまいます。
二重引用符の中に変数を入れ込む方法
$var = "デザイン太郎";
echo "こんにちは{$var}さん"; // こんにちはデザイン太郎さん
変数を二重引用符の中に入れ込みたい場合は「{}」で変数を囲うことで変数として認識され値が展開されます。
ちなみに二重引用符と同じような性質を持つ「ヒアドキュメント※」でも同じ方法で変数展開できます。
※「ヒアドキュメント」とは「<<<任意の文字列〜任意の文字列」で囲った文章をタブやスペース、改行をそのままに出力できる万能な機能です。
echo <<<END
こんにちは{$var}さん こんにちはデザイン太郎さん
空白も 改行も ⇨ 空白も 改行も
そのまま出力できる そのまま出力できる
END;⇦END以外でもなんでも良い
単一引用符の中に変数を入れ込む方法
$var = "デザイン太郎";
echo 'こんにちは'.$var.'さん'; // こんにちはデザイン太郎さん
単一引用符(シングルクォーテーション)に変数を組み込むには「. (ドット)」を使うことで変数として認識させることができます。
phpにおいて「. (ドット)」は文字列の結合する役割があります。
echo '左側'.'右側'; // 左側右側
なので変数でも、グローバル変数でも、関数を使用した値でも結合することが可能です。
$var = "変数"; // strlen関数⇨文字の長さを返す関数
echo '文字列'.$var.strlen("12345"); //文字列変数5
✖️ echo "文字列{$var}{strlen(12345)}"; // ちなみにこのようなコードはNGです
エスケープシーケンスの挙動
エスケープシーケンスとは改行やタブ、ダブルクォーテーションなどを文字列として表す方法の1つです。
エスケープは「逃れる」、シーケンスは「あらかじめ設定しておく動作」という意味でのエスケープシーケンスでしょうか。
よく使うエスケープシーケンス
エスケープシーケンス | 意味 |
---|---|
\n | 改行(ラインフィード) |
\r | 復帰(キャリッジリターン) |
\t | タブ |
\$ | ドル記号 |
\\ | バックスラッシュ |
\" | 二重引用符(ダブルクォーテーション) |
文字列の中にエスケープシーケンスを混ぜて使う際も単一引用符と二重引用符では挙動が異なってきます。
二重引用符はエスケープシーケンスが正しく扱われ、単一引用符ではエスケープシーケンスはただの文字列として扱われます。
echo '改行:\n ドル記号:\$ 二重引用符:\"'; // 改行:\n ドル記号:\$ 二重引用符:\"
echo "改行:\n ドル記号:\$ 二重引用符:\""; // 改行: ドル記号:$ 二重引用符:"
改行に関してはHTMLで表示させる場合「<br>」となりますので「\n」では正しく動作しません。
最後に
今回は他のプログラミング言語と混じりがちな変数と文字列の結合方法をまとめてみました!
phpでは単一引用符(シングルクォーテーション) と二重引用符(ダブルクォーテーション)で全く別の挙動をするのでややこしく自分の備忘録兼、周知用に記事にしてみました!
IT嫌い克服ももう少し...笑
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。