В чем разница между {$var} и $var?

#php #string #variables #substitution

#php #строка #переменные #замена

Вопрос:

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

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

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

 echo "This is a test using $var";
  

Комментарии:

1. Страница руководства по PHP

2. Я использую {} как можно чаще внутри строк

Ответ №1:

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

Ответ №2:

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

Чтобы использовать переменные variable с массивами, вы должны решить проблему неоднозначности. То есть, если вы пишете $$ 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'
  

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

Ответ №4:

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

echo "This is a test using $vars"

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

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

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

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

P.S. Это работает только с «», но не для «.

Комментарии:

1. Если $ var =»bla» выведет «Это тест с использованием blas», поэтому я думаю, что вы ошибаетесь.

2. @sica07 Здесь $vars в первом случае не определен, поэтому он выдаст уведомление PHP: Неопределенная переменная: vars . Но если вы определили, это будет повторяться как его в двойных кавычках. {$var}-ы удостоверяются, что $ var определен , например, разделяют переменную и строку, которые необходимо объединить.

Ответ №5:

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

например

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