什么是{$​​ var}和$ var之间的区别?

时间:2011-05-24 14:13:47

标签: php string variables substitution

我想知道何时以及为什么要使用{$ var}

echo "This is a test using {$var}";

以及何时(和为什么)我应该使用简单形式$ var

echo "This is a test using $var";

6 个答案:

答案 0 :(得分:4)

当a)没有访问值的对象或数组时,你会使用后者; b)没有字符跟随可能被解释为其一部分的变量名。

答案 1 :(得分:4)

http://php.net/manual/en/language.variables.variable.php

  

为了将变量变量与数组一起使用,您必须解析一个   歧义问题。也就是说,如果你   写$$ a [1]然后解析器需要   知道你是否打算用$ a [1]作为   变量,或者如果你想要$$ a作为   变量,然后是[1]索引   那个变量。的语法   解决这种歧义的是:$ {$ a [1]}   对于第一种情况和$ {$ a} [1]   第二个。

答案 2 :(得分:3)

括号允许您在某些特殊情况下消除PHP解析器的歧义。 在你的情况下,它们是等价的。

但请考虑一下:

$foobar = 'hello';
$foo = 'foo';
echo "${$foo . 'bar'}"; // hello

如果没有括号,您将无法获得预期结果:

echo "$$foo . 'bar'"; // $foo . 'bar'

为了清楚起见,我强烈建议不要使用这种语法。

答案 3 :(得分:2)

答案 4 :(得分:1)

如果你写

echo“这是使用$ vars的测试”

您在结果文本中没有获得$ var的内容。

如果你写

echo“这是一个使用{$ var} s”的测试;

一切都会好的。

P.S。它仅适用于“”但不适用于''。

答案 5 :(得分:1)

{}表示法对于在字符串中嵌入多维数组也很有用。

e.g。

$array[1][2] = "square";

$text = "This $array[1][2] has two dimensions";

将被解析为

$text = "This " . $array[1] . "[2] has two dimensions";

你最终会得到文字

This Array[2] has two dimensions

但如果你这样做

$text = "This {$array[1][2]} has two dimensions";

你最终得到了预期的

This square has two dimensions.