按字符串调用方法?

时间:2011-03-27 18:37:18

标签: php oop

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

2 个答案:

答案 0 :(得分:106)

尝试:

$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
}

答案 1 :(得分:9)

再次强调OP提到的内容,call_user_func()call_user_func_array()也是不错的选择。特别是,call_user_func_array()在每个函数的参数列表可能不同时传递参数会做得更好。

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