これを読んで、なぜこれが起こっているのかを明確にしてください。
http://php.net/manual/en/language.types.string.php
具体的には:
文字列が二重引用符またはヒアドキュメントで指定されている場合、変数はその中で解析されます。
これはあなたのコードで起こっていることです:
ドル記号 ($) が検出された場合、パーサーは有効な変数名を形成するためにできるだけ多くのトークンを貪欲に取得します。変数名を中かっこで囲み、名前の末尾を明示的に指定します。
以下に例を示します。
<?php
$juice = "apple";
echo "He drank some $juice juice.".PHP_EOL;
// Invalid. "s" is a valid character for a variable name, but the variable is $juice.
echo "He drank some juice made of $juices.";
?>
上記の例では、次のように出力されます。
彼はリンゴジュースを飲みました。
彼はで作られたジュースを飲みました。
一重引用符を使用すると、文字列が文字通り取られるため、この問題を回避できます。
// Outputs: This will not expand: \n a newline
echo 'This will not expand: \n a newline';
// Outputs: Variables do not $expand $either
echo 'Variables do not $expand $either';