Синтаксис фигурных скобок PHP для переменной-члена - PullRequest
79 голосов
/ 18 июля 2009

Первый вопрос по SO, и это реальный кандидат в RTM. Но я обещаю вам, что посмотрел и не могу найти это. Я с радостью сделаю #headpalm, когда окажется, что я упустил простую вещь.

Пытался выяснить Zend Framework и натолкнулся на следующий синтаксис:

$this->_session->{'user_id'}

Я никогда не видел синтаксис фигурных скобок, используемый для доступа к тому, что выглядит как переменная-член. Чем он отличается от

$this->_session->user_id

Я предполагаю, что _session не имеет значения, но включив его в вопрос, поскольку это может быть не так.

Являются ли фигурные скобки просто соглашением о чистоте, которое пытается обернуть составную переменную имя user_id? Или это какой-то специальный аксессуар?

Любые указатели на TFM, чтобы я мог R, были бы смиренно оценены.

Большое спасибо. Пожалуйста, будьте нежны.

Ответы [ 5 ]

51 голосов
/ 18 июля 2009

Фигурные скобки используются для явного указания конца имени переменной. Например:

echo "This square is {$square->width}00 centimeters broad."; 

Итак, ваш случай действительно является комбинацией двух особых случаев. Вам разрешено получать доступ к переменным класса с помощью фигурных скобок, например:

$class->{'variable_name'} // Same as $class->variable_name
$class->{'variable' . '_name'} // Dynamic values are also allowed

А в вашем случае вы просто окружаете их синтаксисом фигурных скобок.

См. руководство по PHP , «сложный (фигурный) синтаксис».

23 голосов
/ 18 июля 2009

Я знаю синтаксис только при использовании переменных переменных :

$userProp = 'id';
$this->_session->{'user_'.$userProp};
19 голосов
/ 18 июля 2009

Вероятно, есть одно большое преимущество этого синтаксиса, однако, как правило, он относится к области волосатых вещей и вещей, которые вы, вероятно, хотите избежать.

Позволяет использовать символы в именах переменных, которые в противном случае не допускаются.

т.е.:

$this->object->{"hello world\0\n"} 
$this->object->{"function(){   this is a truely awful  name for a variable }"} 
11 голосов
/ 18 июля 2009

В приведенном вами примере реальной разницы нет, и следует использовать IMO $this->_session->user_id, потому что он понятнее.

Синтаксис фигурных скобок на самом деле хорош для доступа к переменной-члену путем создания выражения для его имени, например $this->_session->{'user_id' . $index}.

11 голосов
/ 18 июля 2009

Два примера в вашем вопросе делают то же самое. PHP позволяет получить доступ к данным / методам членов несколькими способами ...

object->{'name_of_member'};

object->name_of_member;

$member = 'name_of_member';
object->$member;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...