开发者

Whats the difference between {$var} and $var?

I would like to know when and why should I use {$var}

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

a开发者_C百科nd when (and why) should I use the simple form $var

echo "This is a test using $var";


You would use the latter when a) not accessing an object or array for the value, and b) no characters follow the variable name that could possibly be interpreted as part of it.


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

In order to use variable variables with arrays, you have to resolve an ambiguity problem. That is, if you write $$a[1] then the parser needs to know if you meant to use $a[1] as a variable, or if you wanted $$a as the variable and then the [1] index from that variable. The syntax for resolving this ambiguity is: ${$a[1]} for the first case and ${$a}[1] for the second.


The brackets allow you to remove ambiguity for the PHP parser in some special cases. In your case, they are equivalent.

But consider this one:

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

Without the brackets, you will not get the expected result:

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

For clarity purposes, I would however strongly advise against this syntax.


If you write

echo "This is a test using $vars"

You do not get content of $var in result text.

If you write

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

Everything will be OK.

P.S. It works only with "" but not for ''.


The {} notation is also useful for embedding multi-dimensional arrays in strings.

e.g.

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

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

will be parsed as

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

and you'll end up with the text

This Array[2] has two dimensions

But if you do

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

you end up with the expected

This square has two dimensions.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜