はあなたが興味のあるメソッドのReflectionMethod
オブジェクトを取得した後、親クラスのメソッドのReflectionMethod
を取得するためにgetPrototype()
を使用することができます。メソッドが親のメソッドをオーバーライドしない場合は、ReflectionClass
例外がスローされます。
次のコード例は、メソッド名がキーである配列と、リフレクションされたクラスで使用されている実装を定義したクラスを作成します。
class Base {
function basemethod() {}
function overridein2() {}
function overridein3() {}
}
class Base2 extends Base {
function overridein2() {}
function in2only() {}
function in2overridein3() {}
}
class Base3 extends Base2 {
function overridein3() {}
function in2overridein3() {}
function in3only() {}
}
$rc = new ReflectionClass('Base3');
$methods = array();
foreach ($rc->getMethods() as $m) {
try {
if ($m->getPrototype()) {
$methods[$m->name] = $m->getPrototype()->class;
}
} catch (ReflectionException $e) {
$methods[$m->name] = $m->class;
}
}
print_r($methods);
これが印刷されます:
Array
(
[overridein3] => Base
[in2overridein3] => Base2
[in3only] => Base3
[overridein2] => Base
[in2only] => Base2
[basemethod] => Base
)
あなたが達成しようとしていることは何ですか? –
メソッドが親クラスから継承されているか、またはクラスが「反映されている」(つまり継承されていない)クラスで定義されているかどうかを知りたい。あなたが正確に理解できないことは何ですか? –
@Matthieu:あなたはそれをやりたいと思う必要があります - その理由は何ですか(あなたの最終目標)?私はリフレクションAPIに慣れていませんが、親クラスでしか定義されていないメソッドにもアクセスできますか? –