Да да адовая формулировка но в общем задача такая надо проверить есть ли в переданном объекте нужные методы, если метод есть то вызываем его. Проблема в том что имя метода передается строкой.
Есть класс Route названием метода приходит строкой в метод execute, вторым параметром приходит объект у которого надо вызвать метод, как его вызвать возможно ? вот метод отдельно
function execute($c, $obj) { //$c - названием метода строкой например 'run', $obj -объект у которого должен быть вызван метод с именем run.
if ($this->validate($c)) {
//тут должен быть вызван метод объекта $obj->c( );
} else {
echo "false";
}
}
Соотв если я вызываю в таком виде как выше, прилетает ошибка что метод c( ) не определен.
Вот полностью класс
class Route implements ActionRoute {
protected $possible = []; //массив со всеми возможными методами (получается из переданного объекта)
protected $ControlObj;
protected $method; //название метода
function __construct($obj) {
$this->possible = get_class_methods($obj); //получаем массив доступных методов
$this->ControlObj = $obj;
}
function validate($n) {
if (in_array($n, $this->possible)) {
echo "validate true $n";
return true;
}
return false;
}
function execute($c, $obj) { //$c - названием метода строкой например 'run', $obj -объект у которого должен быть вызван метод с именем run.
if ($this->validate($c)) {
//тут должен быть вызван метод объекта $obj->c( );
} else {
echo "false";
}
}
}