是否可以在 PHP 中从自身内部引用匿名函数?
Posted
技术标签:
【中文标题】是否可以在 PHP 中从自身内部引用匿名函数?【英文标题】:Is it possible to reference an anonymous function from within itself in PHP? 【发布时间】:2011-12-14 05:54:15 【问题描述】:我正在尝试执行以下操作:
// assume $f is an arg to the wrapping function
$self = $this;
$func = function() use($f, $ctx, $self)
$self->remove($func, $ctx); // I want $func to be a reference to this anon function
$args = func_get_args();
call_user_func_array($f, $args);
;
是否可以从同一个函数中引用分配给 $func 的函数?
【问题讨论】:
哇,我希望我能将所有这些都标记为答案! 我希望其中一个答案能详细说明参考创建和延迟分配。 @mario,我希望你能用你认为正确的答案来回答自己,而不是抱怨人们放在这里的答案。 @Andrew,您可以为所有您认为有用的答案投票。 @Neal:“放置”是指“粘贴”,是吗?不,我不能肯定地回答这个问题。因此问题。 【参考方案1】:尝试做
$func = function() use (/*your variables,*/ &$func)
var_dump($func);
return 1;
;
http://codepad.viper-7.com/cLd3Fu
【讨论】:
我们如何在不命名匿名函数的情况下做到这一点? @Pacerier 我不确定这是否可行。【参考方案2】:是的,你可以
请参阅此示例:http://php.net/manual/en/functions.anonymous.php#105564
示例代码:
<?php
$fib = function($n) use(&$fib)
if($n == 0 || $n == 1) return 1;
return $fib($n - 1) + $fib($n - 2);
;
echo $fib(2) . "\n"; // 2
$lie = $fib;
$fib = function()die('error');;//rewrite $fib variable
echo $lie(5); // error because $fib is referenced by closure
?>
【讨论】:
【参考方案3】:是的,如果您通过引用use
变量是可能的。例如:
$func = function($i) use(&$func)
if ($i <= 0)
return;
echo "Countdown: $i.\n";
$func($i - 1);
;
$func(3);
【讨论】:
以上是关于是否可以在 PHP 中从自身内部引用匿名函数?的主要内容,如果未能解决你的问题,请参考以下文章