PHP从没有反射的实例获取类初始属性

时间:2015-01-29 16:39:08

标签: php object

我会尝试用代码解释问题是什么

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'
)

如果不使用反射类,这可能吗?

1 个答案:

答案 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());

重要

此解决方案不满足问题的要求之一 - 它也提供了继承属性。