シングルクォートの文字列では変数が展開されない
ダブルクォートの文字列内では$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" にします。
よくある誤解
「クォートの種類はどちらでも同じ」という思い込みは誤りです。変数を文字列に埋め込みたい場合はダブルクォート(またはヒアドキュメント)を使う必要があります。
まとめ
シングルクォートの文字列では変数が展開されないは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。