2011-05-24 163 views
3

我想,当知道我为什么要使用{$ VAR}

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

当(为什么)我应该用简单的形式是$ var

+0

我在内部字符串中尽可能经常使用{} – 2011-05-24 14:25:13

+1

[PHP手册页](http://php.net/manual/en/language.types.string.php#language.types.string.parsing。复杂) – 2011-05-24 14:16:34

回答

4

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

1

如果你写

回声“这是使用$瓦尔测试”

你没有得到的结果文本$ VAR的内容。

如果你写

回声 “这是使用{$ VAR}个测试”;

一切都会好的。

P.S.它只适用于“”,但不适用于“”。

+0

回声“这是一个使用$ vars的测试”将返回正确的 – 2011-05-24 14:20:23

+0

如果$ var =“bla”将输出“这是一个使用blas测试”,所以我认为你错了。 – sica07 2011-05-24 14:23:54

+0

@ sica07第一种情况下的$ vars没有定义,所以它会抛出一个PHP Notice:Undefined variable:vars。但是如果你已经定义了它,它将在双引号中回显。 {$ var}确保定义$ var,就像分离需要组合的变量和字符串一样。 – 2011-05-24 17:58:01

4

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

为了使用可变的变量与数组,必须解决一个 模糊问题。也就是说,如果你写入$$ a [1],那么解析器需要 知道你是否打算使用$ a [1]作为 变量,或者如果你想$$ a作为 变量,然后[ 1]指数从 那个变量。解决此歧义的 的语法是:第一种情况为$ {$ a [1]} ,第二种情况为$ {$ a} [1]为 。

3

的支架可以使您免去歧义在某些特殊情况下PHP解析器。 就你而言,它们是等价的。

但考虑这一个:

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

如果没有括号,你不会得到预期的结果:

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

为了清楚起见,我会但强烈反对这种语法。

1

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

例如

$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. 
+0

谢谢你的明确解释 – sica07 2011-05-24 14:51:45

相关问题