2012-01-31 134 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

相关问题