Question Méthode d'appel par chaîne?


Class MyClass{
  private $data=array('action'=>'insert');
  public function insert(){
    echo 'called insert';
  }

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

Cela ne marche pas:

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

seules les possibilités sont à utiliser call_user_func(); ?


34
2018-03-27 18:37


origine


Réponses:


Essayer:

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

Vous pouvez le faire en toute sécurité en vérifiant s'il est appelable en premier:

$action = $this->data['action'];
if(is_callable(array($this, $action))){
    $this->$action();
}else{
    $this->default(); //or some kind of error message
}

92
2018-03-27 18:38



Réaffirmant ce que l'OP a mentionné, call_user_func() et call_user_func_array() sont également de bonnes options. En particulier, call_user_func_array() fait un meilleur travail pour transmettre des paramètres lorsque la liste de paramètres peut être différente pour chaque fonction.

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

7
2017-10-08 16:27