是否可以在 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 中从自身内部引用匿名函数?的主要内容,如果未能解决你的问题,请参考以下文章

在匿名 PHP 函数中从父范围访问变量

匿名内部类

php 在 匿名函数中 调用自身。。

python的这四大函数类型得牢记(变量,引用,匿名,递归)

PHP引擎是不是优化循环内的匿名函数?

匿名函数可以返回自己吗?