Вызов вложенной лямбда-функции в PHP

возможно ли вызвать лямбда-функцию вложенным способом

<?php
$func=function() use($something,$func /** as you know it will be undefined so what could be other way arround**/){
  if($something){
       $func();
  }
}

person dev.meghraj    schedule 26.07.2016    source источник
comment
почему голосование против? это не связано с PHP   -  person dev.meghraj    schedule 26.07.2016
comment
это разрешено stackoverflow.com/questions/3737139/, но настоящие проблемы не допускаются.   -  person dev.meghraj    schedule 26.07.2016
comment
Значит, в определении чего-то вы хотите использовать сказанное выше?   -  person u_mulder    schedule 26.07.2016


Ответы (2)


$func еще не определен, когда вы передаете его в $func. $func будет определен только сразу после определения функции, что уже слишком поздно для того, чтобы это сработало.

Легкий обходной путь выглядит следующим образом:

$func = null;
$func = function() use (&$func) {

}
person Evert    schedule 26.07.2016
comment
хороший ... Никогда бы не подумал использовать для этого ссылки ... - person Marc B; 26.07.2016
comment
я тоже............. - person dev.meghraj; 26.07.2016

use $func не может быть успешным, потому что $func не будет определен до ПОСЛЕ того, как создание лямбда будет завершено и не вернет лямбда. PHP не может путешествовать во времени.

Вы также не можете сделать что-то вроде:

$func = '';
$func = function() use $something, $func ....;

Пока это обходится с $func is not defined, оно также "блокирует" значение $func в лямбде в момент создания лямбды:

php > $foo = 'bar';
php > $baz = function() use($foo) { echo $foo; };
php > $baz();
bar
php > $foo = 'qux';
php > $baz();
bar
person Marc B    schedule 26.07.2016