我有这个对象,我可以通过 $object->name 访问名称,但无法获取星线和端线。我尝试$object->starline
它返回null。
PHPParser_Node_Expr_Variable 对象 ( [subNodes:protected] => Array ( [name] => var ) [attributes:protected] => Array ( [startLine] => 2 [endLine] => 2 ) )
我有这个对象,我可以通过 $object->name 访问名称,但无法获取星线和端线。我尝试$object->starline
它返回null。
PHPParser_Node_Expr_Variable 对象 ( [subNodes:protected] => Array ( [name] => var ) [attributes:protected] => Array ( [startLine] => 2 [endLine] => 2 ) )
你得到 $object->name,因为类PHPParser_NodeAbstract有魔术方法 __get()。
PHPParser_Node_Expr_Variable扩展了扩展PHPParser_NodeAbstract的 PHPParser_Node_Expr。所以 PHPParser_Node_Expr_Variable 对象具有这些类所具有的所有方法(对象继承)。
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,因为数组 subNodes 中没有这样的属性“starline”。但是如果你看一下 getAttribute() 方法,你就会明白这段代码必须工作。
$object->getAttribute('startLine');