2009-07-31 1 views
2

Я читал книгу PHP5, и автор широко используется этот синтаксис

${"{$something}_somethingelse"}; 

Я понятия не имею, что это значит. Динамически генерирует имя переменной?

Кто-то мне помогает?

+3

Ответ на правильный ответ правильный; Тем не менее, я скажу, что как разработчик PHP в течение длительного времени я редко их использую, и большую часть времени я считаю их запахом кода. –

+3

Я вам поможем - купите другую книгу. Определенно запах кода, чтобы использовать эти «общие» – Draemon

ответ

9

Это свойство языка называется Variable variables.

Рассмотрим следующий фрагмент кода:

$a = 'hello'; 

Это довольно прямо вперед. Он создает переменную $a и устанавливает ее значение 'hello'.

Давайте двигаться дальше:

$$a = 'world'; 
${$a} = 'world'; 

В принципе, так как $a = 'hello', те два утверждение являются эквивалентом делать:

$hello = 'world'; 

Так следующее:

echo "$a ${$a}"; 

ли эквивалент:

echo "$a $hello"; 

Скобы { }

Скобки используются для предотвращения проблемы неоднозначности возникновения.Рассмотрим следующий пример:

$$a[1] = 'hello world'; 

Вы хотите назначить переменную после значения $a[1] или вы хотите, чтобы присвоить индекс 1 переменной имени $a?

Для первого выбора, можно было бы написать ее как таковую:

${$a[1]} = 'hello world'; 

Для второго выбора:

${$a}[1] = 'hello world'; 

Ваш пример

Теперь, для примера.

Будем считать, что:

$something = 'hello'; 

Используя ваш пример, как, например:

${"{$something}_somethingelse"} = 'php rocks'; 

бы быть по существу эквивалентно делать:

$hello_somethingelse = 'php rocks'; 
+0

Мне нужен еще один принятый ответ! Будь ты проклят! –

+2

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

1

Это заменит {$something} значением $ something.

Я думаю, что внутренние фигурные скобки только для удобства чтения и помочь при выполнении $object->property и т.д.

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

Например,

$foo = 'bar'; 

$$foo = 7; 

echo $bar; 

// produces 7; 
+0

Надеюсь, вы не возражаете - я неправильно понял первый раз, когда прочитал. – Draemon

+0

Не против upvote? Ничего страшного. – alex

1

Кронштейны позволяют делать более сложные имена переменных. Это ваш случай, если $ something был равен тесту:

 
${"test_somethingelse"}; 

Это просто расширенное имя переменной.

Вот пример.

 
$test = "test"; 
${"test_test"} = "test2"; 

echo $test; // prints test 
echo ${"test_test"}; // prints test2 

Использование Variable Varaibles, как и все упомянутые выше, позволяет создавать переменные на основе других переменных. Так что в вашем случае, он делает переменную, основанную на значении $ что-то

 
$something = "test"; 

${"{$something}_somethingelse"}; 

turns into 

${"test_somethingelse"}; 

2

Они являются 'переменные переменные'. См. this.

Смежные вопросы