Первый вопрос по SO, и это настоящий кандидат на RTM. Но обещаю, я искал и, кажется, не нашел. Я с радостью сделаю хедпалм, когда окажется, что это простая вещь, которую я пропустил.
Пытался разобраться в Zend Framework и наткнулся на следующий синтаксис:
$this->_session->{'user_id'}
Я никогда не видел синтаксиса фигурных скобок, используемого для доступа к тому, что кажется переменной-членом. Чем это отличается от
$this->_session->user_id
Я предполагаю, что _session не имеет значения, но включаю его в вопрос, поскольку это может быть не так.
Фигурные скобки - это всего лишь соглашение о чистоте, которое пытается обернуть составное имя переменной user_id? Или это какой-то особый аксессуар?
Любые указатели на TFM, чтобы я мог R up, были бы скромно признательны.
Большое спасибо. Пожалуйста, будьте нежны.
источник
$obj->$method($params)
Ответы:
Фигурные скобки используются для явного указания конца имени переменной. Например:
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 , «сложный (фигурный) синтаксис».
источник
Я знаю синтаксис только при использовании переменных переменных :
$userProp = 'id'; $this->_session->{'user_'.$userProp};
источник
Вероятно, есть одно большое преимущество этого синтаксиса, но, как правило, он относится к области волосатых вещей и вещей, которых вы, вероятно, хотите избежать.
Это позволяет вам использовать символы в именах переменных, которые в противном случае не разрешены.
то есть:
$this->object->{"hello world\0\n"} $this->object->{"function(){ this is a truely awful name for a variable }"}
источник
В приведенном вами примере нет реальной разницы, и ИМО
$this->_session->user_id
следует использовать , потому что это более понятно.На самом деле синтаксис фигурных скобок хорош для доступа к переменной-члену путем создания выражения для ее имени, например
$this->_session->{'user_id' . $index}
.источник
Два примера в вашем вопросе делают то же самое. PHP позволяет вам получить доступ к данным / методам членов несколькими способами ...
object->{'name_of_member'}; object->name_of_member; $member = 'name_of_member'; object->$member;
источник