Code Fix

初級

シングルクォートの文字列では変数が展開されない

ダブルクォートの文字列内では$variableがその値に置き換わりますが、シングルクォートの文字列内では一切展開されず、そのままの文字として出力されます。

なぜエラーが出ないのか

出力: Hi, $name!
(エラーなし)
PHPは何も報告しません。文法として正しいためです
出力: Hi, $name!
実際の挙動 — 期待した結果と食い違っている箇所
見つけ方
エラーが出ないので、出力を目で確かめるか、コードを目で追うしかありません。この種の誤りが最も発見が遅れます

このエラーが出る典型パターン

パターン1

 1  <?php
 2  $name = "Al";
 3  echo 'Hi, $name!';
               ^
出力: Hi, $name!期待: Hi, Al! (エラーにはなりません)

シングルクォートの中では$nameは展開されず、そのままの文字として出力されます。変数を埋め込むにはダブルクォートが必要です。

直し方: 'Hi, $name!' を "Hi, $name!" にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  <?php
 2  $item = "apple";
 3  echo 'You bought: $item';
                  ^
出力: You bought: $item期待: You bought: apple (エラーにはなりません)

シングルクォートは変数展開をしません。$itemという文字がそのまま出力されてしまいます。

直し方: 'You bought: $item' を "You bought: $item" にします。

この問題を解いてみる →

パターン3

 1  <?php
 2  $city = "Tokyo";
 3  echo 'I live in $city';
                 ^
出力: I live in $city期待: I live in Tokyo (エラーにはなりません)

変数を文字列に埋め込みたいときは、シングルクォートではなくダブルクォートを使う必要があります。

直し方: 'I live in $city' を "I live in $city" にします。

この問題を解いてみる →

パターン4

 1  <?php
 2  $food = "sushi";
 3  echo 'I love $food';
                ^
出力: I love $food期待: I love sushi (エラーにはなりません)

シングルクォートの中では$foodは展開されず、そのままの文字として出力されます。

直し方: 'I love $food' を "I love $food" にします。

この問題を解いてみる →

パターン5

 1  <?php
 2  $team = "Reds";
 3  echo 'Go $team';
              ^
出力: Go $team期待: Go Reds (エラーにはなりません)

シングルクォートは変数展開をしません。$teamという文字がそのまま出力されます。

直し方: 'Go $team' を "Go $team" にします。

この問題を解いてみる →

よくある誤解

「クォートの種類はどちらでも同じ」という思い込みは誤りです。変数を文字列に埋め込みたい場合はダブルクォート(またはヒアドキュメント)を使う必要があります。

実務での勘所

変数展開が要らない文字列には、習慣的にシングルクォートを使うことが多くのPHPのスタイルガイドで推奨されています。ダブルクォートの文字列は、変数や特殊なエスケープシーケンスが含まれていないか、PHPが中身を毎回解析する必要がありますが、シングルクォートの文字列はこの解析処理をスキップできます。「展開が必要な箇所だけダブルクォート、それ以外はシングルクォート」と使い分けることで、コードを読む側にも「ここでは変数展開が起きている」という合図になります。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)