Подтвердить что ты не робот

Вызов метода по строке?

Class MyClass{
  private $data=array('action'=>'insert');
  public function insert(){
    echo 'called insert';
  }

  public function run(){
    $this->$this->data['action']();
  }
}

Это не работает:

$this->$this->data['action']();

возможно только использование call_user_func();?

4b9b3361

Ответ 1

Try:

$this->{$this->data['action']}();

Вы можете сделать это безопасно, проверив, разрешено ли это:

$action = $this->data['action'];
if(is_callable(array($this, $action))){
    $this->$action();
}else{
    $this->default(); //or some kind of error message
}

Ответ 2

Подчеркивая, что упоминалось в OP, call_user_func() и call_user_func_array() - также хорошие варианты. В частности, call_user_func_array() выполняет лучшую работу при передаче параметров, когда список параметров может быть различным для каждой функции.

call_user_func_array(
    array($this, $this->data['action']),
    $params
);