成员变量的PHP大括号语法

关于SO的第一个问题,它是真正的RTM候选人。但是我保证你已经看过了,但似乎找不到。当我发现错过了一件简单的事情时,我会很高兴地做一个#headpalm。


试图弄清楚Zend Framework并遇到以下语法:


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

我从未见过用于访问似乎是成员变量的花括号语法。有什么不同


$this->_session->user_id

我假设_session无关紧要,但由于可能没有问题,因此将其包含在问题中。


花括号只是试图包装复合变量名称user_id的清洁约定吗?还是某种特殊的访问器?


任何对TFM的指点,以便我可以R表示赞赏。


非常感谢。请保持温柔。


Smart猫小萌
浏览 335回答 3
3回答

蝴蝶刀刀

花括号用于显式指定变量名的结尾。例如: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手册 “复杂(卷曲)语法”。

呼唤远方

但是,该语法可能有一个很大的优势,即它通常在多毛的东西领域以及您可能需要避免的事情。它允许您在变量名中使用字符,否则不允许使用这些字符。即:$this->object->{"hello world\0\n"} $this->object->{"function(){   this is a truely awful  name for a variable }"} 

芜湖不芜

在您给出的示例中,没有任何实际区别,$this->_session->user_id应该使用IMO,因为它更清晰。花括号语法实际上最适合的是通过为其名称构造表达式来访问成员变量,例如$this->_session->{'user_id' . $index}。
打开App,查看更多内容
随时随地看视频慕课网APP