2012-01-31 128 views
5

可能重複:
Immediately executing anonymous functions我可以立即評估一個匿名函數嗎?

我想立刻評估,而不是它出現在方法ARGS一個關閉對象的匿名函數。這可能嗎?

例如:

$obj = MyClass; 
$obj->Foo(function(){return "bar";}); // passes a Closure into Foo() 
$obj->Foo(function(){return "bar";}()); // passes the string "bar" into Foo()? 

第三行是非法的語法 - 有沒有辦法做到這一點?

感謝

+0

很難想象爲什麼你需要這樣做?爲什麼不把函數的結果賦值給一個變量,然後傳遞該變量呢? – 2012-01-31 20:48:13

+0

同樣在這些例子中,你的函數幾乎只是一個匿名函數,沒有閉包的特性,它不是從當前上下文中'記住'任何變量 – 2012-01-31 20:49:56

+1

我意識到,我真的不想解釋爲什麼我需要要做到這一點 - 顯然這是一種不尋常的情況。 – Tom 2012-01-31 20:54:26

回答

2

您可以用call_user_func做到這一點...儘管這可能有點傻時,你可以只是把它分配給一個變量,然後調用該變量。

call_user_func(function(){ echo "bar"; });

你也許認爲PHP 5.4與它的非關聯化的功能將使這一切成爲可能。但是你會錯的(反正RC6)。

+0

爲什麼你認爲這很愚蠢? – Tadeck 2012-01-31 20:54:47

+0

@Tadeck好吧,在我看來,當你可以簡單地執行'$ f = function(){echo'1'時,對'call_user_func'執行額外的函數調用是沒有意義的。 }; $ f();'儘管在這種情況下使用'call_user_func'在技術上沒有什麼不妥,我發現顯式調用更具可讀性。儘管如此,我可以通過'call_user_func'在簡單的一行中看到這種吸引力。 – rdlowrey 2012-01-31 21:00:15

相關問題