php - tutorial - Llamar método por cadena?




this php (2)

Al volver a enfatizar lo que el PO mencionó, call_user_func() y call_user_func_array() también son buenas opciones. En particular, call_user_func_array() hace un mejor trabajo al pasar parámetros cuando la lista de parámetros puede ser diferente para cada función.

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

https://code.i-harness.com

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

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

Esto no funciona:

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

las únicas posibilidades es usar call_user_func(); ?


Tratar:

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

Puede hacerlo de forma segura verificando si se puede llamar primero:

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




oop