2010-10-15 13 views
7

Tengo dos objetos. Objeto A y B.Llamar a métodos php con cadenas

A tiene un método que devuelve B. Y me quieren llamar a esta dinámica, así que uso una cadena para llamar a un método en el interior de B de este modo:

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

Pero si hacer esto :

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

No funciona. ¿Algunas ideas?

+0

¿No deberías llamar '$ a-> getB()' primero para obtener * B *? – Gumbo

+0

¿Por qué su método no tiene '()'? – Shikiryu

Respuesta

18

No puede hacerlo así. $method solo puede contener el nombre de un método de A. Lea sobre variable functions. Sin embargo, podría tener que tener variables, p.

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

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

Pero probablemente sería mejor volver a pensar el problema, considere otra estructura de su código y/o echar un vistazo a los patrones de diseño.

La pregunta es: ¿cuál es su objetivo final?

+0

Perdón por activar un hilo antiguo, pero esta pregunta y respuesta se aplicaron a mí. Estoy pensando en crear una API api para llamadas ajax. ¿Esta sería la mejor manera de permitir que JavaScript envíe métodos como cadenas para interactuar con un objeto? – Bill

+2

Puedes hacerlo así. También es posible que desee echarle un vistazo a ['__call'] (http://www.php.net/manual/en/language.oop5.overloading.php#object.call). Sin embargo, no puedo decirte cuál es la mejor manera. Parece que quieres hacer * llamadas de procedimiento remoto (RPC) *. Ya hay algunas bibliotecas para eso, así que también puedes echarle un vistazo. –

+0

algo que me gusta de php – ahnbizcad

Cuestiones relacionadas