2009-04-21 5 views
5

Wenn Rubin zu einer Party eingeladen wird und sich bringt:PHP-Äquivalent von senden und getattr?

foobarobject.send('foomethod') 

.. und Python wird auf der gleichen Party eingeladen und bringt:

getattr(foobarobject, 'foomethod')() 

.. Was ist PHP an die Partei bringen ?

Bonusfrage: Wenn Ruby und Python eifersüchtig auf die Party-Favors von PHP wurden, nach welchen englischen Begriffen würden sie in der PHP-Dokumentation suchen, um hinter PHPs Rücken zu sprechen?

+0

Die beiden sind unterschiedlich: Die Ruby-Version ruft die Methode auf; Die Python-Version gibt eine gebundene Methode zurück. – Miles

+5

+1 für die kreative Art, die Frage zu formulieren :) –

+0

@Miles: Die Frage wird nun durch Hinzufügen von Paren zu der Python-Version geändert. – dreftymac

Antwort

10

PHP bringt dies:

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

... und der Koks und Chips.

EDIT:

Obwohl der Begriff für die oben ist variable variables gibt es nichts speziell reden sie auf ein Objekt in der Anleitung zu tun.

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

PHP ist düster .... –

3

Mit Variable den Namen der Methode zu halten: Sie können jedoch die gleiche Sache mit call_user_func erreichen. So ziemlich wie Paolos erstes Beispiel, aber vielleicht nicht so offensichtlich, wenn man es nicht weiß.

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

Sie haben auch die Reflection classes.

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