Относится ли метод к конкретному классу
Доброго времени суток!
У меня возникла проблема и пока нет конкретного решения. Хотелось бы сделать проверку, относится ли метод к конкретному классу или нет. method_exists() работает по всем доступным методам, а надо именно по классу. Т.е. речь идет именно о наличии в нем того или иного метода...
class firstClass {
public function firstMethod() {}
private function secondMethod() {}
}
class secondClass extends firstClass {
public function thirdMethod() {}
private function fourthMethod() {}
}
$obj = new secondClass;
$methodName = 'firstMethod';
if(method_exists($obj,$methodName)) {
}
Точнее хочется определить это в случае с наследованием для дочернего класса.
Заранее благодарю!
Ответы (2 шт):
Автор решения: Кирилл Малышев
→ Ссылка
function check_method($obj, $methodName)
{
$class = new ReflectionClass($obj);
$methods = $class->getMethods();
return [] != array_filter($methods, function($v) use ($methodName, &$obj) {
return $v->name === $methodName && $v->class === get_class($obj);
});
}
$obj = new secondClass;
$methodName = 'firstMethod';
var_dump(check_method($obj, $methodName));
Автор решения: InDevX
→ Ссылка
Можно использовать метод hasMethod() класса ReflectionClass
class firstClass {
public function firstMethod() {}
private function secondMethod() {}
}
class secondClass extends firstClass {
public function thirdMethod() {}
private function fourthMethod() {}
}
$refObj = new ReflectionClass('secondClass');
if( $refObj->hasMethod('firstMethod') ) {
...
}