阅读此内容以帮助澄清发生这种情况的原因:
http://php.net/manual/en/language.types.string.php
具体来说:
当用双引号或 heredoc 指定字符串时,会在其中解析变量。
这是您的代码发生的情况:
如果遇到美元符号 ($),解析器将贪婪地获取尽可能多的标记来形成有效的变量名。将变量名括在花括号中以明确指定名称的结尾。
这是一个例子:
<?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';