Я хотел бы знать, когда и почему я должен использовать {$ var}
echo "This is a test using {$var}";
и когда (и почему) я должен использовать простую форму $ var
echo "This is a test using $var";
Вы бы использовали последнее, когда a) не обращались к объекту или массиву для значения, и b) никакие символы не следуют за именем переменной, которое можно было бы интерпретировать как часть его.
http://php.net/manual/en/language.variables.variable.php
Чтобы использовать переменные переменные с массивами, вы должны решить проблему двусмысленности. То есть, если вы пишете $$ a [1], тогда анализатор должен знать, хотите ли вы использовать $ a [1] в качестве переменной или если вы хотите $$ a как переменную, а затем индекс [1] из эта переменная. Синтаксис для устранения этой двусмысленности: $ {$ a [1]} для первого случая и $ {$ a} [1] для второго.
Скобки позволяют устранить двусмысленность для парсера PHP в некоторых особых случаях. В вашем случае они эквивалентны.
Но рассмотрим это:
$foobar = 'hello'; $foo = 'foo'; echo "${$foo . 'bar'}"; // hello
Без скобок вы не получите ожидаемого результата:
echo "$$foo . 'bar'"; // $foo . 'bar'
Для ясности я бы настоятельно рекомендовал этот синтаксис.
получить ответ отсюда
Должен ли я использовать фигурные скобки или конкатенатные переменные в строках?
для большей проверки этого
Если вы пишете
echo "Это тест с использованием $ vars"
Вы не получаете содержание $ var в тексте результата.
Если вы пишете
echo "Это тест с использованием {$ var} s";
Все будет нормально.
PS Он работает только с "", но не для ''.
Обозначение {}
также полезно для встраивания многомерных массивов в строки.
например
$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.