В чем разница между {$ var} и $ var? - PullRequest
3 голосов
/ 24 мая 2011

Я хотел бы знать, когда и почему я должен использовать {$ var}

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

и когда (и почему) я должен использовать простую форму $ var

echo "This is a test using $var";

Ответы [ 6 ]

4 голосов
/ 24 мая 2011

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

Чтобы использовать переменные переменные с массивами, необходимо решить проблему неоднозначности.То есть, если вы пишете $$ a [1], то парсер должен знать, хотели ли вы использовать $ a [1] в качестве переменной или если вы хотели $$ a в качестве переменной, а затем индекс [1] изэта переменная.Синтаксис для разрешения этой неоднозначности: $ {$ a [1]} для первого случая и $ {$ a} [1] для второго.

4 голосов
/ 24 мая 2011

Вы должны использовать последнее, когда а) не обращаетесь к объекту или массиву для значения и б) никакие символы не следуют за именем переменной, которое может быть интерпретировано как его часть.

3 голосов
/ 24 мая 2011

Скобки позволяют вам устранить неоднозначность для парсера PHP в некоторых особых случаях. В вашем случае они эквивалентны.

Но рассмотрим это:

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

Без скобок вы не получите ожидаемого результата:

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

Для ясности я бы настоятельно рекомендовал не использовать этот синтаксис.

2 голосов
/ 24 мая 2011
1 голос
/ 24 мая 2011

Запись {} также полезна для встраивания многомерных массивов в строки.

, например

$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.
1 голос
/ 24 мая 2011

Если вы напишите

echo "Это тест с использованием $ vars"

Вы не получаете содержимое $ var в тексте результата.

Если вы напишите

echo "Это тест с использованием {$ var} s";

Все будет хорошо.

P.S. Работает только с "", но не для ".

...