Magic方法+ Reflection API =无法调查类属性。为什么?

时间:2010-04-23 11:26:23

标签: php oop magic-methods

如果我使用魔法。使用反射API时,我无法调查类属性。为什么会这样?

  

修改

什么是Reflection API?请不要引用我的php.net我不明白..用你的话引导我plsss

2 个答案:

答案 0 :(得分:2)

使用魔术方法访问属性,这些属性通常不会出现在类的定义中。

您的班级定义通常如下所示:

class MyClass {
    private $data;
    public function __get($name) {
        return $this->data[$name];
    }
    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
}


由于没有真实属性 - 只有$data数组,魔术方法__get__set将使用这些数据作为大数据-store - Reflection API无法看到它们。

这是使用魔术方法引起的问题之一:它们用于访问属性(或带有__call的方法,而不存在 - 而Reflection API只能看看那里有什么。

答案 1 :(得分:-2)

一种可能的解决方案可能是将$ data的范围扩大到受保护:

class MyClass {
    protected $data;
    public function __get($name) {
        return $this->data[$name];
    }
    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
}

这样,扩展类可以根据需要访问数组并收集运行时定义的属性。