2009-04-21 10 views
5

Se Rubino viene invitato a una festa e porta:equivalente PHP di send e getattr?

foobarobject.send('foomethod') 

.. e Python viene invitato allo stesso partito e porta:

getattr(foobarobject, 'foomethod')() 

.. cosa significa PHP devono portare al partito ?

Domanda bonus: Se Ruby e Python fossero gelosi dei favori di PHP, quali termini inglesi avrebbero cercato nella documentazione di PHP per parlarne dietro alle spalle di PHP?

+0

I due sono diversi: la versione Ruby invoca il metodo; la versione di Python restituisce un metodo associato. – Miles

+5

+1 per il modo creativo per la questione frase :) –

+0

@Miles: La questione è ora modificato con l'aggiunta di parentesi alla versione pitone. – dreftymac

risposta

10

PHP porta questo:

$foobarobject->{"foomethod"}(); 

... e la coca e patatine fritte.

EDIT:

Anche se il termine per quanto sopra è variable variables non c'è niente di specificamente parlando di fare a un oggetto nel manuale. Tuttavia, è possibile ottenere la stessa cosa con call_user_func:

call_user_func(array($foobarobject, "foomethod")); 
+4

PHP è triste .... –

3

Utilizzando variabile per contenere il nome del metodo. Praticamente uguale al primo esempio di Paolo, ma forse non così ovvio se non lo sai.

$method = "foomethod"; 
$foobarobject->$method(); 

Hai anche il Reflection classes.

$method = new ReflectionMethod('Foobar', 'foomethod'); 
$method->invoke(null);