如果我使用魔法。使用反射API时,我无法调查类属性。为什么会这样?
修改
什么是Reflection API?请不要引用我的php.net我不明白..用你的话引导我plsss
答案 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;
}
}
这样,扩展类可以根据需要访问数组并收集运行时定义的属性。