我会尝试用代码解释问题是什么
class A {
protected $a;
}
class B extends A {
protected $b;
}
$b = new B();
$b->c = true;
get_class_properties($b);
我需要这个函数只返回声明类的属性,不包括继承和动态创建的属性。代码的预期结果是
Array (
[0] => string(1) 'b'
)
如果不使用反射类,这可能吗?
答案 0 :(得分:2)
我提出了一个解决方案,当然在我发布问题之后。我只是添加答案,以防将来有人在寻找这个。
如果有人有更好的解决方案,请发帖!
我想出的是我需要添加一个额外的方法来获取属性名称
public function getOwnProperties(){
return get_class_vars(__CLASS__);
}
所以在问题的例子中它看起来像
class A {
protected $a;
public final function getOwnProperties(){
return get_class_vars(get_called_class());
}
}
class B extends A {
protected $b;
}
$b = new B();
$b->c = true;
print_r($b->getOwnProperties());
此解决方案不满足问题的要求之一 - 它也提供了继承属性。