如何在PHP中调用当前的匿名函数?

Tow*_*wer 29 php

我有一个匿名函数,应该调用自己.但是,我手头没有变量或函数名,所以我希望找到一个函数,它可以在函数的上下文中返回"this".有这样的事吗?

这是一个例子:

$f = function() use($bar, $foo) {
  // call this function again.
};
Run Code Online (Sandbox Code Playgroud)

这样打电话:

call_user_func(__FUNCTION__);
Run Code Online (Sandbox Code Playgroud)

导致这个:

警告:call_user_func()期望参数1是有效的回调函数,找不到函数"{closure}"或函数名无效

如果我尝试将$ f放入use-list,那么它表示该变量未定义(因为它还没有).

Pau*_*xon 58

__FUNCTION__ 不能用于匿名函数

将包含匿名函数的变量作为'use'子句中的引用传递....

$f = function() use($bar, $foo, &$f) {
   $f();
};
Run Code Online (Sandbox Code Playgroud)

提示回答这个问题.


Tow*_*wer 7

好的,我发现了这样做的方法:

$f = function() use(&$f) {
  $f();
};

$f();
Run Code Online (Sandbox Code Playgroud)

关键是要传递$ f作为参考.因此,PHP不会尝试传递值,而是传递对内存槽的引用.