Call method by string?

后端 未结 2 1380
鱼传尺愫
鱼传尺愫 2020-12-05 04:23
Class MyClass{
  private $data=array(\'action\'=>\'insert\');
  public function insert(){
    echo \'called insert\';
  }

  public function run(){
    $this->         


        
相关标签:
2条回答
  • 2020-12-05 04:40

    Reemphasizing what the OP mentioned, call_user_func() and call_user_func_array() are also good options. In particular, call_user_func_array() does a better job at passing parameters when the list of parameters might be different for each function.

    call_user_func_array(
        array($this, $this->data['action']),
        $params
    );
    
    0 讨论(0)
  • 2020-12-05 04:41

    Try:

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

    You can do it safely by checking if it is callable first:

    $action = $this->data['action'];
    if(is_callable(array($this, $action))){
        $this->$action();
    }else{
        $this->default(); //or some kind of error message
    }
    
    0 讨论(0)
提交回复
热议问题