2010-08-03 3 views
4

Я получаю основы переменных переменных, но я видел, что синтаксис просто знает, что немного пугает мой разум.переменные переменных PHP в {} символах

$this->{$toShow}(); 

Я действительно не вижу, что там делают {} символы. Есть ли у них какое-то особое значение?

ответ

4

PHP-анализатор переменных не является жадным. {} Используются для указания того, что следует считать частью ссылки на переменные, а что нет. Рассмотрим следующее:

$arr = array(); 
$arr[3] = array(); 
$arr[3][4] = 'Hi there'; 

echo "$arr[3][4]"; 

Обратите внимание на двойные кавычки. Вы ожидаете, что это выведет Hi there, но на самом деле вы видите Array[4]. Это связано с несерьезностью анализатора. Он будет проверять только один уровень индексации массива в то время как вставляя переменные в строку, так что он действительно видел, было это:

echo $arr[3], "[4]"; 

Но, делая

echo "{$arr[3][4]}"; 

силы PHP, чтобы обработать все внутри скобок как переменную ссылку, и вы получите ожидаемый Hi there.

4

Они сообщают парсеру, где начинается и заканчивается имя переменной. В этом конкретном случае это может не понадобиться, но рассмотрите этот пример:

$this->$toShow[0] 

Что должен делать парсер? Есть $toShow массив или $this->$toShow? В этом случае переменная сначала разрешается, а индекс массива применяется к полученному свойству.

Так что, если вы на самом деле хотите получить доступ к $toShow[0], вы должны написать:

$this->{$toShow[0]} 
3

Эти фигурные скобки могут быть использованы, чтобы использовать выражения, чтобы указать идентификатор переменной, а не только значения переменной:

$var = 'foo'; 
echo ${$var.'bar'}; // echoes the value of $foobar 
echo $$var.'bar'; // echoes the value of $foo concatenated with "bar" 
0
$this->{$toShow}(); 

Разбить его, как показано ниже:

Сначала это объектно-ориентированный стиль программирования, как вы получили увидеть $this and ->. Во-вторых, {$toShow}() - это метод (функция), так как вы можете видеть скобки().

Так что теперь {$toShow}() следует как-то разобрать на имя типа 'compute()'. И $ toShow - это просто переменная, которая может содержать возможное имя функции. Но остается вопрос, почему {} используется вокруг.

Причина: {} скобки заменяют значение в месте. Чтобы уточнить,

$toShow="compute"; 

так,

{$toShow}(); //is equivalent to compute(); 

, но это не так:

$toShow();  //this is wrong as a variablename is not a legal function name 
Смежные вопросы