我有这个对象,我可以通过$ object-> name访问名称,但无法获取星线和末尾。我试试$object->starline
它返回null。访问php对象值
PHPParser_Node_Expr_Variable对象([子节点:保护] =>数组( [名称] => VAR)[属性:保护] =>数组([STARTLINE] => 2 [ENDLINE] => 2))
我有这个对象,我可以通过$ object-> name访问名称,但无法获取星线和末尾。我试试$object->starline
它返回null。访问php对象值
PHPParser_Node_Expr_Variable对象([子节点:保护] =>数组( [名称] => VAR)[属性:保护] =>数组([STARTLINE] => 2 [ENDLINE] => 2))
您获得$ 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');
感谢getAttribute解决了这个问题。 –
它们如所述“受保护”,因此不可用于外部。 – djot
该物品没有物业星标! – nni6
但为什么我能够得到名字 –