Фигурные скобки в строке в PHP

Из чего значение { } (фигурные скобки) в строковых литералах в PHP?

181
задан Mark Amery 17 October 2015 в 02:48
поделиться

1 ответ

Это сложный (фигурный) синтаксис для интерполяции строк. Из руководства:

Сложный (фигурный) синтаксис

Это называется сложным не потому, что синтаксис сложен, а потому, что он позволяет использовать сложные выражения.

С помощью этого синтаксиса можно включить любую скалярную переменную, элемент массива или свойство объекта со строковым представлением. Просто напишите выражение так, как оно выглядит вне строки, а затем заключите его в { и } .Поскольку { не может быть экранирован, этот синтаксис будет распознан только тогда, когда $ следует сразу за {. Используйте {\ $ , чтобы получить литерал {$ . Несколько примеров, чтобы прояснить ситуацию:

  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";
264
ответ дан 23 November 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: