获取php类的抽象(父)变量?

时间:2014-07-23 18:19:48

标签: php inheritance properties

我想创建一个函数来填充对象的属性,一些属性将在多个继承的类之间共享,但有些属性将特定于继承的类。我想处理来自父级的共享属性和来自继承类的特定于变量的属性。 (即,执行子项中的特定内容,然后为共享事物调用parent :: populateStuff())

我没有回头重新散列所有变量名称,而是希望使用get_class_vars或get_object_vars来获取要填充的属性的名称。但是当你运行get_object_vars($ this)时,你会得到所有'继承变量(包括父变量和继承变量),无论它在哪个级别被调用。如果我用get_class_vars调用特定的类名,我可以得到父类的东西,但是我无法看到继承类中添加或覆盖的内容。我也不希望在代码中放置静态类名,因为它使重构时的可移植性降低。

我确实发现我可以在父级中运行get_parent_class($ this)并且这种方式有效,但似乎是获取本地类名的一种循环方式。 (get_class(s​​elf)puked)但至少这可以在父级别工作。

所以我的问题是,有没有更好的方法来获得抽象层类变量或类名? 有没有更好的方法来获得继承的唯一属性? (我可以使用父变量进行数组拼接,但这会排除任何被覆盖的内容)

1 个答案:

答案 0 :(得分:0)

使用反射,我提出了这个并且它有效,但我仍然想知道是否有办法在不调用反射类的情况下执行此操作:

/**
 * @param object|Zend_Db_Table_Row $row
 */
public function populateThisLayer($row) {
    $reflect = new \ReflectionClass(__CLASS__);
    foreach($reflect->getProperties() as $_p) {
        $_k = $_p->name;
        if(($_p->class == __CLASS__) && property_exists($row, $_k)) {
            $this->$_k = (is_numeric($row->$_k)) ? floatval($row->$_k) : $row->$_k;
        }
    }
}