2010-08-11 38 views
15

Si estoy sobrecargar el método __call en una clase de PHP, ¿cómo podría llamar al método real si mi código no hace otra cosa? Por ejemplo:PHP Cómo llamar a parent :: __ call() y pase los argumentos

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

La cuestión es que el $arguments se pasan a través como una matriz, ¿cómo podría continuar pasando a través de información $this->$name($arg, $arg, $arg ...) hay una manera correcta de hacer esto?

Respuesta

18

Puede llamar:

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

o estoy malentendido lo que estás pidiendo?

Editar:

Y si usted quiere decir que desea llamar $this->$name() para tratar de desencadenar parent::__call(), no va a funcionar. Terminará en un bucle infinito hasta que la pila se desborde y php falle (en otras palabras, es malo) ...

+0

Je! ¡Nunca pensé en eso! : D – tarnfeld

6

Puede utilizar esta:

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

gracias por el ejemplo, yo no tenía que visitar php.net :) – Marecky

+0

gracias taaaaaaaaaaaaaaaan mucho –

+0

Esto funcionará ony en métodos estáticos .... – igaster

Cuestiones relacionadas