如果我使用魔术方法。使用反射 API 时,我无法调查类属性。为什么会这样?
编辑
什么是反射 API?请不要参考我php.net我不明白..请用你的话指导我
如果我使用魔术方法。使用反射 API 时,我无法调查类属性。为什么会这样?
编辑
什么是反射 API?请不要参考我php.net我不明白..请用你的话指导我
使用魔术方法访问属性,这些属性通常不会出现在类的定义中。
您的班级定义通常如下所示:
class MyClass {
private $data;
public function __get($name) {
return $this->data[$name];
}
public function __set($name, $value) {
$this->data[$name] = $value;
}
}
由于没有真正的属性——只有一个$data
数组,它将被魔法方法__get
用作__set
大数据存储——反射 API 看不到这些属性。
这是使用魔法方法引起的问题之一:它们用于访问不存在的属性(或方法,with __call
) ——而反射 API 只能看到存在的内容。
一个可能的解决方案可能是将 $data 的范围扩大到受保护的范围:
class MyClass {
protected $data;
public function __get($name) {
return $this->data[$name];
}
public function __set($name, $value) {
$this->data[$name] = $value;
}
}
这样,扩展类可以在他们认为合适的时候访问数组并收集运行时定义的属性。