匿名函数可以 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;}}
[空白只是为了便于阅读;如果需要,所有这些都应该在一行上工作。]
作为 的变体,您可以使用(超)全局变量而不是 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';
})()
);
在一些 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;}}
[空白只是为了便于阅读;如果需要,所有这些都应该在一行上工作。]
作为 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';
})()
);