В PHP, что делает синтаксис $ {$}?

Я столкнулся с этим внутри плагина WordPress.

$stuff = $wpdb->get_results(" assume valid database query here "); foreach ($stuff as $cur) ${$cur->type}[] = $cur->name; 

$stuff будет объектом, содержащим больше объектов строк базы данных. Эти строки базы данных будут иметь 'id' столбцов 'id' , 'type' и 'name' . Столбец 'type' будет содержать одну из этих трех строк: 'file' , 'url' или 'code' .

Похоже, этот фрагмент кода потенциально может создать или добавить новые элементы в массивы с именем $file , $url и / или $code . Однако я не знаком с этим использованием синтаксиса $ {$}; Я видел это только в двойных кавычках, чтобы избежать проблем с синтаксическим разбором.

Правильно ли я в моем анализе этого кода? Где я могу узнать больше об этом использовании синтаксиса $ {$}?

Возникает вопрос о синтаксисе $ {} внутри строки с двумя кавычками. Я понимаю это использование, но я задаю вопрос о втором символе $ внутри скобок {}.

Рассматривать

 $foo = 42; $a = 'foo'; echo $$a; // Prints 42 

Это называется переменной переменной, так как имя переменной определяется во время выполнения. Но есть ли $$ a [1] то же самое, что $ {$ a [1]} или то же, что и {$$ a} [1]? Скобки избегают этой двусмысленности, как и они, когда имеют дело с приоритетом оператора в математике.

Это переменная. В этом случае он ссылается на массив в переменной, названной так, как в $cur->type .

Лично я ненавижу это и предпочитаю делать это:

 $someArray[$cur->type][] = $cur->name; 

эти фигурные скобки открывают контекст строки, оценивая выражение там, в строку, которая затем используется как имя переменной.

Например, если вы хотите написать переменную с именем, вы никогда не сможете писать в обычном PHP:

 echo $; 

Переменная с пустым именем. PHP даст вам синтаксическую ошибку. Однако вы можете создать такую ​​переменную с фигурными скобками:

 ${''} = 'hello'; echo ${''}; # prints "hello" 

это переменная с пустым именем. Это может быть полезно, если вы хотите сначала оценить имя переменной:

 ${$cur->type}[] | ### 1. ###| `---- 2. ---´ 

Это позволяет четко указывать, где находится массив. В переменной с именем $cur->type .

Я, вероятно, не могу объяснить это очень хорошо, это сообщение в блоге, которое я помню, поэтому, вероятно, стоит по теме:

  • Переменные имена PHP: Curly Brace Madness (январь 2008 г., Salathe)