1
abstract class foo
{
    public $blah;
}

class bar extends foo
{
    public $baz;
}

鉴于我有一个foo从抽象类继承的类,我将如何获得仅存在于但不存在于(即在级别上定义的属性)bar的实例变量数组?在上面的示例中,我想要但不是.barfoobarbazblah

4

1 回答 1

3

正如 hakre 所说,使用Reflection. 获取该类的父类,并对属性进行比较,如下所示:

function get_parent_properties_diff( $obj) {
    $ref = new ReflectionClass( $obj);
    $parent = $ref->getParentClass();
    return array_diff( $ref->getProperties(), $parent->getProperties());
}

你会这样称呼它:

$diff = get_parent_properties_diff( new bar());
foreach( $diff as $d) {
    echo $d->{'name'} . ' is in class ' . $d->{'class'} . ' and not the parent class.' . "\n";
}

在这个演示中看到它的工作,它输出:

baz is in class bar and not the parent class.
于 2012-10-26T16:55:05.523 回答