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

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

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

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

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

$this->_session->user_id

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

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

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

т.е.:

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

Ответ 4

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

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

Ответ 5

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

object->{'name_of_member'};

object->name_of_member;

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