Из чего значение { }
(фигурные скобки) в строковых литералах в PHP?
Это сложный (фигурный) синтаксис для интерполяции строк. Из руководства:
Сложный (фигурный) синтаксис
Это называется сложным не потому, что синтаксис сложен, а потому, что он позволяет использовать сложные выражения.
С помощью этого синтаксиса можно включить любую скалярную переменную, элемент массива или свойство объекта со строковым представлением. Просто напишите выражение так, как оно выглядит вне строки, а затем заключите его в
{
и}
.Поскольку{
не может быть экранирован, этот синтаксис будет распознан только тогда, когда$
следует сразу за{
. Используйте{\ $
, чтобы получить литерал{$
. Несколько примеров, чтобы прояснить ситуацию:Php // Показать все ошибки error_reporting (E_ALL); $ great = 'фантастический'; // Не работает, выводит: Это {фантастика} эхо "Это {$ отлично}"; / / Работает, выводит: Это фантастика echo "This is {$ great}"; echo "This is $ {great}"; // Работает echo "Ширина этого квадрата {$ square-> width} 00 сантиметров."; // Работает, ключи в кавычках работают только с синтаксисом фигурных скобок echo "Это работает: {$ arr ['key']}"; { {1}} // Работает echo "Это работает: {$ arr [4] [3]}"; / / Это неверно по той же причине, что и $ foo [bar] вне строки. // Другими словами, это все равно будет работать, но только потому, что PHP сначала ищет / / константа с именем foo; будет выдана ошибка уровня E_NOTICE (неопределенная константа) //. echo "Это неправильно: {$ arr [foo] [3]}"; // Работает. При использовании многомерных массивов всегда используйте фигурные скобки вокруг массивов // внутри строк echo "Это работает: {$ arr ['foo'] [3]}"; {{1 }} // Работает. echo "Это работает:".$ arr ['foo'] [3]; echo "Это тоже работает: {$ obj-> values [3] -> name}"; {{1 }} echo "Это значение переменной с именем $ name: {$ {$ name}}"; echo "Это значение переменной, названной возвращаемым значением getName (): {$ {getName ()}} "; echo" Это значение переменной, названной возвращаемым значением \ $ object-> getName (): {$ { $ object-> getName ()}} "; // Не будет работать, выводит: Это возвращаемое значение getName (): {getName ()} echo "Это возвращаемое значение getName (): {getName ()}"; ?>
Часто в этом синтаксисе нет необходимости. Например, это:
$a = 'abcd';
$out = "$a $a"; // "abcd abcd";
ведет себя точно так же, как это:
$out = "{$a} {$a}"; // same
Таким образом, фигурные скобки не нужны. Но this :
$out = "$aefgh";
будет, в зависимости от уровня вашей ошибки, либо не работать, либо выдаст ошибку, потому что нет переменной с именем $ aefgh
, поэтому вам необходимо сделать:
$out = "${a}efgh"; // or
$out = "{$a}efgh";