Я столкнулся с этим внутри плагина 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
.
Я, вероятно, не могу объяснить это очень хорошо, это сообщение в блоге, которое я помню, поэтому, вероятно, стоит по теме: