Class MyClass{
private $data=array('action'=>'insert');
public function insert(){
echo 'called insert';
}
public function run(){
$this->$this->data['action']();
}
}
Cela ne fonctionne pas:
$this->$this->data['action']();
seules les possibilités sont d'utiliser call_user_func();
?
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
}
Soulignant 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 lors du passage des paramètres lorsque la liste des paramètres peut être différente pour chaque fonction.
call_user_func_array(
array($this, $this->data['action']),
$params
);