возможно ли вызвать лямбда-функцию вложенным способом
<?php
$func=function() use($something,$func /** as you know it will be undefined so what could be other way arround**/){
if($something){
$func();
}
}
возможно ли вызвать лямбда-функцию вложенным способом
<?php
$func=function() use($something,$func /** as you know it will be undefined so what could be other way arround**/){
if($something){
$func();
}
}
$func
еще не определен, когда вы передаете его в $func
. $func
будет определен только сразу после определения функции, что уже слишком поздно для того, чтобы это сработало.
Легкий обходной путь выглядит следующим образом:
$func = null;
$func = function() use (&$func) {
}
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