-2

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

PHPParser_Node_Expr_Variable 对象 ( [subNodes:protected] => Array ( [name] => var ) [attributes:protected] => Array ( [startLine] => 2 [endLine] => 2 ) )

4

1 回答 1

0

你得到 $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');
于 2013-09-28T17:29:15.540 回答