2010-10-15 15 views
7

Ho due oggetti. Oggetto A e B.Chiamare metodi php con stringhe

A ha un metodo che restituisce B. E voglio chiamare questo dinamicamente in modo da utilizzare una stringa per chiamare un metodo all'interno di B in questo modo:

$method = 'getB()->someMethod'; 

Ma se fare questo :

$a = new A(); 
$a->$method(); 

Non funziona. Qualche idea?

+0

Non dovresti chiamare '$ a-> getB()' per ottenere * B *? – Gumbo

+0

Perché il tuo metodo non ha '()'? – Shikiryu

risposta

18

Non puoi farlo così. $method può contenere solo il nome di un metodo di A. Maggiori informazioni su variable functions. Potresti avere variabili, ad es.

$method1 = 'getB'; 
$method2 = 'someMethod'; 

$a->$method1()->$method2(); 

Ma probabilmente sarebbe meglio ripensare il problema, prendere in considerazione un'altra struttura del codice e/o di avere uno sguardo a modelli di progettazione.

La domanda è: qual è il tuo obiettivo finale?

+0

Mi dispiace scoccare un vecchio thread, ma questa domanda e risposta mi sono state applicate. Sto pensando di creare un PHP API per chiamate Ajax. Questo sarebbe il modo migliore per consentire a javascript di inviare metodi come stringhe per interagire con un oggetto? – Bill

+2

Puoi farlo così. Potresti anche dare un'occhiata a ['__call'] (http://www.php.net/manual/en/language.oop5.overloading.php#object.call). Non posso dirvi qual è il modo migliore però. Sembra che tu voglia fare * chiamate di procedura remota (RPC) *. Ci sono già alcune librerie per questo, quindi potresti anche dare un'occhiata a quelle. –

+0

qualcosa che in realtà mi piace di php – ahnbizcad