【问题标题】:Is it possible to reference an anonymous function from within itself in PHP?是否可以在 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:“放置”是指“粘贴”,是吗?不,我不能肯定地回答这个问题。因此问题。

标签: php closures anonymous-function


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-29
      • 2023-02-07
      • 2012-01-06
      • 2013-08-05
      • 2016-09-26
      • 1970-01-01
      • 2012-01-31
      相关资源
      最近更新 更多