在字符串中使用的PHP美元符号

4
我不明白为什么PHP不能在包含美元符号的字符串中进行替换。 看下面的例子:
<?php
error_reporting (E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
$var = 1024;
$str = '$var';
echo $str, '<br>', "$str";

输出是 $var $var。为什么会这样呢?第一个echo的参数很清楚,但我原本以为最后一个参数会得到不同的结果(1024),因为它包含了被双引号封装的美元符号,所以应该被解释为变量并替换为1024。我错在哪里了呢?


在你提问之前,你有查看过 http://php.net/manual/en/language.types.string.php 吗? - Gordon
当使用双引号或heredoc指定字符串时,其中的变量将被解析。我认为$str的内容应该被解释为一个变量。 - Kirill Smirnov
是的,它被解释为$str,其中包含字符串'$var' - Gordon
我只是想澄清一下,这并不是因为配置设置或在这种情况下转义美元符号的原因。 - Kirill Smirnov
我认为这是一个误解。手册中的“双引号”指的是“双引号”,而不是由(两个)“单引号”括起来的字符串。手册语言可能需要更清晰明了一些……“所示类型”的其他语言在日常语言中使用不同的引号。 - Ber
4个回答

11

$str 包含着一个字符串,其内容是"$var"(没有变量替换,就是这些字符)。该字符串使用单引号创建,因此不会进行变量替换。

当使用echo "$str"输出时,变量$str将被其内容替换,即字符串"$var",因此输出结果为"$var"

双引号字符串中的字符串替换不会递归进行!因此,为了使第二个出现的$str被替换为1024,必须在一开始使用双引号创建$str


3
你也可以使用"pas$word"来避免美元符号($)的影响。 - Ben

7

" 允许你在字符串中放置变量。

' 将所有内容都作为字符串。

因此,如果你输入 '$var' - 它就是一个带有 $ 的字符串。

"$str" 会取 $str 的值,所以它会输出 $var


1

$str 包含了字面字符串 $var,由于它被单引号包裹着,所以永远不会被解释。

如果要解释它,需要使用 eval() 函数。

eval($str)

将输出1042


0

你是指这个吗?

<?php
  error_reporting (E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
  $var = 1024;
  $str = $var;
  echo $str, '<br>', "$str";

输出 -

1024

1024

呵呵


仅包含代码的答案在StackOverflow上价值不高。旧的仅包含代码的答案会激发新的仅包含代码的答案。请通过编辑此答案并添加一些解释来展示更好的回答方式。 - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接