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();
?
Пытаться:
$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 }
по$action = $this->data['action']; if(is_callable(array($this, $action))){ $this->$action(); }else{ $this->default(); //or some kind of error message }
Подчеркивая то, что упоминалось в OP, call_user_func()
и call_user_func_array()
также являются хорошими вариантами. В частности, call_user_func_array()
делает лучшую работу при передаче параметров, когда список параметров может быть различным для каждой функции.
call_user_func_array( array($this, $this->data['action']), $params );