在 PHP 中调用嵌套的 Lambda 函数

Calling Nested Lambda Function in PHP

是否可以嵌套调用lambda函数

<?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 在 lambda 创建完成并返回 lamba 之前不会被定义。 PHP 无法进行时间旅行。

你也不能做这样的事情:

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

虽然绕过了 $func is not defined,但它也在创建 lambda 时 "locks" 将 $func 的值放入 lambda 中:

php > $foo = 'bar';
php > $baz = function() use($foo) { echo $foo; };
php > $baz();
bar
php > $foo = 'qux';
php > $baz();
bar