PHP equivalent of send and getattr?
Asked Answered
P

2

7

If Ruby gets invited to a party and brings:

foobarobject.send('foomethod') 

.. and Python gets invited to the same party and brings:

getattr(foobarobject, 'foomethod')()

.. what does PHP have to bring to the party?

Bonus question: If Ruby and Python got jealous of PHP's party-favors, what English terms would they search for in PHP's documentation in order to talk about it behind PHP's back?

Peden answered 21/4, 2009 at 4:29 Comment(4)
The two are different: the Ruby version invokes the method; the Python version returns a bound method.Statistician
+1 for the creative way to phrase the question :)Brahmanism
@Miles: the question is now modified by adding paren to the python version.Peden
See also: #786912Peden
B
12

PHP brings this:

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

... and the coke and chips.

EDIT:

Although the term for the above is variable variables there is nothing specifically talking about doing it to an object in the manual. However, you can achieve the same thing with call_user_func:

call_user_func(array($foobarobject, "foomethod"));
Brahmanism answered 21/4, 2009 at 4:30 Comment(0)
A
3

Using variable to hold the method name. Pretty much the same as Paolo's first example, but maybe not so obvious unless you know about it.

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

You also got the Reflection classes.

$method = new ReflectionMethod('Foobar', 'foomethod');
$method->invoke(null);
Adjure answered 21/4, 2009 at 5:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.