abstract class foo
{
public $blah;
}
class bar extends foo
{
public $baz;
}
鉴于我有一个foo
从抽象类继承的类,我将如何获得仅存在于但不存在于(即在级别上定义的属性)bar
的实例变量数组?在上面的示例中,我想要但不是.bar
foo
bar
baz
blah
abstract class foo
{
public $blah;
}
class bar extends foo
{
public $baz;
}
鉴于我有一个foo
从抽象类继承的类,我将如何获得仅存在于但不存在于(即在级别上定义的属性)bar
的实例变量数组?在上面的示例中,我想要但不是.bar
foo
bar
baz
blah
正如 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.