Синтаксис фигурной скобки PHP для переменной-члена


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

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

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

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

$this->_session->user_id

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

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

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

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

5 78

5 ответов:

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

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 manual, " сложный (фигурный) синтаксис."

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

$userProp = 'id';
$this->_session->{'user_'.$userProp};

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

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

ie:

$this->object->{"hello world\n"} 
$this->object->{"function(){   this is a truely awful  name for a variable }"} 

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

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

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

object->{'name_of_member'};

object->name_of_member;

$member = 'name_of_member';
object->$member;