2010-08-11 21 views
15

Se sto sovraccaricare il metodo __call in una classe PHP, come avrei potuto chiamare il metodo effettivo se il mio codice non fare qualcos'altro? Per esempio:PHP Come chiamare parent :: __ call() e passare gli argomenti

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

Il problema è che il $arguments sono passati attraverso come una matrice, come avrei potuto continuare a passare loro attraverso informazioni $this->$name($arg, $arg, $arg ...) c'è un modo giusto per fare questo?

risposta

18

È possibile chiamare:

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

o sto fraintendendo quello che stai chiedendo?

Edit:

E se si intende che si desidera chiamare $this->$name() per cercare di innescare parent::__call(), non funzionerà. Finirai in un ciclo infinito finché lo stack non esploderà e php si blocca (in altre parole, è brutto) ...

+0

Eh! Non ci ho mai pensato! : D – tarnfeld

6

È possibile utilizzare questo:

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

grazie per l'esempio, non ho dovuto visitare php.net :) – Marecky

+0

grazie milleOOOOOOOO –

+0

Questo funzionerà solo su metodi statici .... – igaster

Problemi correlati