Хотя это, казалось бы, тривиально, нужно перебрать последовательность родительских классов:
$seekMethod = 'wallet';
$stack = [];
foreach(class_parents('daughter') as $parent){
foreach((new ReflectionClass($parent))->getMethods() as $method){
if($seekMethod == $method->name){
$stack[] = "{$method->class}::{$method->name}() in {$parent}";
echo "Found ".end($stack);
}
}
}
echo "{$seekMethod} is defined in ".end($stack);
Будет выводить что-то вроде:
Found father::wallet() in mother
Found father::wallet() in father
wallet is defined in father::wallet() in father
Или проще, без учета наследования:
foreach((new ReflectionClass('daughter'))->getMethods() as $method){
if($seekMethod == $method->name){
echo "Found {$method->class}::{$method->name}";
}
}
Будет выводить, например,
Found father::wallet