Ответ 1
Попробуйте сделать
$func = function() use (/*your variables,*/ &$func) {
var_dump($func);
return 1;
};
Я пытаюсь сделать что-то вроде следующего:
// 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, с той же функцией?
Попробуйте сделать
$func = function() use (/*your variables,*/ &$func) {
var_dump($func);
return 1;
};
Да, вы можете
Смотрите этот пример: 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
?>
Да, возможно, если вы use
переменная по ссылке. Например:
$func = function($i) use(&$func) {
if ($i <= 0) {
return;
}
echo "Countdown: $i.\n";
$func($i - 1);
};
$func(3);
Это может быть еще более простым и гибким. Просто
$func = function($param1, $paramN) {
// ... code before recursion entry point
// dive deeper using magic constant
call_user_func_array(__FUNCTION__, [$param1, $paramN]);
};