代码之家  ›  专栏  ›  技术社区  ›  David Weinraub

成员变量的PHP花括号语法

  •  79
  • David Weinraub  · 技术社区  · 17 年前

    第一个问题是这样的,这是一个真正的RTM候选人。但我向你保证,我已经找过了,但似乎找不到。当我发现这是一件我错过的简单事情时,我会很高兴地做一个头掌。

    在尝试了解Zend Framework时,遇到了以下语法:

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

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

    $this->_session->user_id
    

    我假设_会话是不相关的,但将它包括在问题中,因为它可能不是。

    如果有任何指向TFM的提示,我将不胜感激。

    非常感谢。请温柔一点。

    5 回复  |  直到 9 年前
        1
  •  54
  •   jmikola    12 年前

    大括号用于显式指定变量名的结尾。例如:

    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

        2
  •  24
  •   Gumbo    17 年前

    我只知道使用时的语法 variable variables :

    $userProp = 'id';
    $this->_session->{'user_'.$userProp};
    
        3
  •  20
  •   Kent Fredric    17 年前

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

    $this->object->{"hello world\0\n"} 
    $this->object->{"function(){   this is a truely awful  name for a variable }"} 
    
        4
  •  13
  •   chaos    17 年前

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

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

        5
  •  11
  •   Donnie DeBoer    17 年前

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

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