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

qjp7pelc  于 2022-12-21  发布在  PHP
关注(0)|答案(3)|浏览(177)

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

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

foo(__________ALLOWED_INPUT____________);

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

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

然而,我还没有想出这样做的方法。有可能吗?
PS:不错的游戏(https://returntrue.win/?level=6)。

vohkndzv

vohkndzv1#

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

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

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

zvokhttg

zvokhttg2#

[空格仅用于可读性;如果需要,所有这些都应在一行中工作。]
作为Alexandre Elshobokshy's answer的一个变体,可以使用(超级)全局变量代替use语句来给予函数对自身的访问权限:

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

或者,您可以使用debug_backtrace让函数在调用堆栈中找到自己:

foo(
    function() { 
        $backtrace = debug_backtrace();
        return $backtrace[1]['args'][0];
    }
)

受Spudley关于返回函数名的评论的启发,实际上可以通过将函数 Package 在IIFE中来在允许的范围内声明函数:

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

x7rlezfr3#

据我所知,匿名函数不能返回对自身的引用,而且据我所知,没有内置的PHP函数可以返回对自身的引用,所以这会留下一个可调用的类。

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

answers-to-returntrue.win-with-explanations

相关问题