PHP:匿名函数可以返回自身吗?

时间:2018-10-29 14:55:37

标签: php lambda return anonymous-function

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

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

foo(__________ALLOWED_INPUT____________);

现在我的想法是传递一个返回自身的匿名函数:

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

但是我还没有找到一种方法来做到这一点。有可能吗?

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

3 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:1)

据我所知,匿名函数无法返回对自身的引用,并且据我所知,没有内置的PHP函数可以返回对自身的引用,因此将留下可调用的类。可以的:

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

answers-to-returntrue.win-with-explanations

答案 2 :(得分:1)

[空格仅用于可读性;如果需要,所有这些都可以在一行上工作。]

作为Islam Elshobokshy's answer的变体,您可以使用(超级)全局变量而不是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';
    })()
);
相关问题