匿名函数可以 return 本身吗?

Can an anonymous function return itself?

在一些 PHP 测验中,我完成了以下任务 - 我必须 return true 完成以下任务:

function foo($x)
{
    return $x === $x();
}

foo(__________ALLOWED_INPUT____________);

现在我的想法是传递一个匿名函数 returns 本身:

foo(function() { return $this_function; })

但是我还没有想出办法来做到这一点。有可能吗?

PS:不错的游戏 (https://returntrue.win/?level=6)。

您可以创建一个匿名函数,returns 对其自身的引用:

foo($x=function()use(&$x){return$x;})

http://sandbox.onlinephpfunctions.com/code/743f72c298e81e70f13dc0892894911adfb1b072

据我所知,匿名函数不能 return 对自身的引用,并且没有内置 PHP 函数 return 对自身的引用我知道,这样会留下一个可调用的 class。这可行:

new class{function __invoke(){return $this;}}

answers-to-returntrue.win-with-explanations

[空白只是为了便于阅读;如果需要,所有这些都应该在一行上工作。]

作为 的变体,您可以使用(超)全局变量而不是 use 语句来让函数访问自身:

foo(
    $GLOBALS['x'] = function() { 
        return $GLOBALS['x']; 
    }
);

或者您可以使用 debug_backtrace:

让函数在调用堆栈中找到自己
foo(
    function() { 
        $backtrace = debug_backtrace();
        return $backtrace[1]['args'][0];
    }
)

受 Spudley 关于返回函数名称的评论的启发,您实际上可以在允许的范围内声明一个函数,方法是将它包装在 IIFE:

foo(
    (function(){
       function f(){ return 'f'; }
       return 'f';
    })()
);