成员variables的PHP大括号语法

关于SO的第一个问题,这是一个真正的RTM候选人。 但是我向你保证,我看起来似乎无法find它。 我会很乐意做一个#headpalm,事实certificate是一个简单的事情,我错过了。

试图找出Zend框架,并遇到以下语法:

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

我从来没有见过花括号语法来访问看起来是一个成员variables。 它和它有什么不同?

 $this->_session->user_id 

我假定这次会议是无关紧要的,但是把它包括在问题中,因为它可能不是。

花括号是否只是一个清洁约定,试图包装复合variables名称user_id? 或者它是一种特殊的访问者?

任何指向TFM的指针,所以我可以R谦虚表示赞赏。

非常感谢。 请温柔。

花括号用于明确指定variables名的结尾。 例如:

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

所以,你的情况实际上是两种特殊情况的组合。 您可以使用花括号来访问类variables,如下所示:

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

在你的情况下,你只是用大括号语法来包围它们。

请参阅PHP手册 ,“复杂(curl)语法”。

我知道使用variablesvariables时的语法:

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

Theres可能是这个语法的一个很大的优势,但是,它通常在毛茸茸的东西领域,以及你可能想要避免的事情。

它允许您在variables名中使用不允许的字符。

即:

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

在你给的例子中,没有真正的区别,应该使用IMO $this->_session->user_id因为它更清晰。

什么花括号语法实际上是好的访问一个成员variables通过构build一个名称的expression式,如$this->_session->{'user_id' . $index} $this->_session->{'user_id' . $index}

在你的问题中的两个例子做同样的事情。 PHP允许您以多种方式访问​​成员数据/方法…

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