Вы можете получить объект ReflectionMethod
для интересующего вас метода, а затем использовать getPrototype()
, чтобы получить ReflectionMethod
метода в родительском классе.Если метод не переопределяет метод в родительском объекте, это вызовет исключение 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
)