Question PHP Comment appeler parent :: __ call () et passer les arguments


Si je surcharge le __call méthode dans une classe PHP, comment pourrais-je appeler la méthode réelle si mon code ne fait pas autre chose? Par exemple:

public function __call($name, $arguments)
{
    if($name == 'tom')
    {
        $this->doName($name);
    }
    else
    {
        // Something here to carry on the __call maybe:
        // $this->$name($arguments);
    }
}

Le problème est que le $arguments sont passés en tant que tableau, comment pourrais-je continuer à les transmettre à travers des informations $this->$name($arg, $arg, $arg ...) y a-t-il une bonne façon de faire cela?


15
2017-08-11 20:22


origine


Réponses:


Tu peux appeler:

return parent::__call($name, $arguments);

Ou est-ce que je comprends mal ce que vous demandez?

Modifier:

Et si vous voulez dire que vous voulez appeler $this->$name() pour essayer de déclencher parent::__call(), ça ne marchera pas. Vous allez vous retrouver dans une boucle infinie jusqu'à ce que la pile déborde et que php se bloque (en d'autres termes, c'est mauvais) ...


18
2017-08-11 20:25



Vous pouvez utiliser ceci:

call_user_func_array("self::method", $parameters)

6
2017-08-11 20:31



http://php.net/manual/en/function.call-user-func-array.php est ce que vous recherchez


5
2017-08-11 20:26