我有这个对象,我可以通过$ object->名称访问该名称,但无法获取星号和结束。我尝试$object->starline
它返回null。
PHPParser_Node_Expr_Variable Object([subNodes:protected] => Array( [name] => var)[attributes:protected] =>数组([startLine] => 2 [endLine] => 2))
答案 0 :(得分:0)
你得到$ object-> name,因为类PHPParser_NodeAbstract有魔术方法__get()。
PHPParser_Node_Expr_Variable扩展了扩展PHPParser_NodeAbstract的PHPParser_Node_Expr。因此,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');