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

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 );