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

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

Este doens no funciona:

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

sólo posibilidades es el uso de call_user_func(); ?

InformationsquelleAutor dynamic | 2011-03-27

2 Comentarios

  1. 110

    Tratar:

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

    Usted puede hacerlo de forma segura mediante la comprobación de si es que 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
    }
    • Asegúrese de comprobar si la función existe: function_exists() en primer lugar!
    • Funciona. Debo usar cualquier de seguridad de trucos como la función o funciones permite matriz ?
    • Si de entrada proviene de usuario, usted siempre debe escapar de ella correctamente.Idealmente, el uso de una «lista blanca» con acciones admitidas.
    • usted no necesita utilizar function_exist si ya cheque con is_callable
    • Vale la pena mencionar que en algunas versiones de PHP, is_callable no respeta la visibilidad, como se ha comentado en la documentación
  2. 9

    De relieve lo que el OP se mencionó, call_user_func() y call_user_func_array() también son buenas opciones. En particular, call_user_func_array() hace un mejor trabajo en la transmisión de parámetros cuando la lista de parámetros pueden ser diferentes para cada función.

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

Dejar respuesta

Please enter your comment!
Please enter your name here