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 に答える