Вызов метода по строке?
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();
?
Ответы
Ответ 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
);