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.