我可以立即评估一个匿名函数吗?
问题描述:
可能重复:
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()?
第三行是非法的语法 - 有没有办法做到这一点?
感谢
答
您可以用call_user_func
做到这一点...尽管这可能是有点傻时,你可以只是把它分配给一个变量,然后调用该变量。
call_user_func(function(){ echo "bar"; });
你也许认为PHP 5.4与它的非关联化的功能将使这一切成为可能。但是你会错的(反正RC6)。
很难想象为什么你需要这样做?为什么不把函数的结果赋值给一个变量,然后传递该变量呢? – 2012-01-31 20:48:13
同样在这些例子中,你的函数几乎只是一个匿名函数,没有闭包的特性,它不是从当前上下文中'记住'任何变量 – 2012-01-31 20:49:56
我意识到,我真的不想解释为什么我需要要做到这一点 - 显然这是一种不寻常的情况。 – Tom 2012-01-31 20:54:26