Подтвердить что ты не робот

Можно ли ссылаться на анонимную функцию изнутри внутри PHP?

Я пытаюсь сделать что-то вроде следующего:

// 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, с той же функцией?

4b9b3361

Ответ 1

Попробуйте сделать

$func = function() use (/*your variables,*/ &$func) {
    var_dump($func);
    return 1;
};

http://codepad.viper-7.com/cLd3Fu

Ответ 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);

Ответ 4

Это может быть еще более простым и гибким. Просто

$func = function($param1, $paramN) {
  // ... code before recursion entry point
  // dive deeper using magic constant
  call_user_func_array(__FUNCTION__, [$param1, $paramN]);
};