2009-04-21 83 views
5

如果紅寶石被邀請去參加一個聚會,並帶來:PHP等價於send和getattr?

foobarobject.send('foomethod') 

..和Python被邀請到同一政黨,並帶來:

getattr(foobarobject, 'foomethod')() 

..什麼呢PHP必須把黨?

紅利問題:如果Ruby和Python嫉妒PHP的party-favours,他們會在PHP的文檔中搜索哪些英文術語以便在PHP背後討論它?

+0

兩者不同:Ruby版本調用方法; Python版本返回一個綁定方法。 – Miles 2009-04-21 04:52:04

+5

+1爲創造性的方式來短語問題:) – 2009-04-21 04:56:38

回答

10

PHP帶來了這一點:

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

...和焦炭和芯片。

編輯

雖然上述期限variable variables沒有什麼特別談論它做手冊中的對象。但是,就可以實現同樣的事情call_user_func

call_user_func(array($foobarobject, "foomethod")); 
3

使用變量來保存方法名。與Paolo的第一個例子幾乎一樣,但除非您知道它,否則可能不那麼明顯。

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

您還獲得了Reflection classes

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