2013-09-28 84 views
-2

我有这个对象,我可以通过$ object-> name访问名称,但无法获取星线和末尾。我试试$object->starline它返回null。访问php对象值

PHPParser_Node_Expr_Variable对象([子节点:保护] =>数组( [名称] => VAR)[属性:保护] =>数组([STARTLINE] => 2 [ENDLINE] => 2))

+2

它们如所述“受保护”,因此不可用于外部。 – djot

+0

该物品没有物业星标! – nni6

+0

但为什么我能够得到名字 –

回答

0

您获得$ object-> name,因为类PHPParser_NodeAbstract具有魔术方法__get()。

PHPParser_Node_Expr_Variable延伸PHPParser_Node_Expr扩展PHPParser_NodeAbstract。所以PHPParser_Node_Expr_Variable对象具有这些类所具有的所有方法(Object inheritance)。

abstract class PHPParser_NodeAbstract implements ... 
{ 
    .... 

    public function &__get($name) { 
     return $this->subNodes[$name]; 
    } 

    ... 

    public function &getAttribute($key, $default = null) { 
     if (!array_key_exists($key, $this->attributes)) { 
      return $default; 
     } else { 
      return $this->attributes[$key]; 
     } 
    } 
} 

而你没有得到$ object-> starline,因为在数组子节点中没有这样的属性“starline”。 但是,如果你看看方法getAttribute(),你会明白这个代码必须工作。

$object->getAttribute('startLine'); 
+0

感谢getAttribute解决了这个问题。 –