匿名函数中的参数块有什么用

What is the use for the argument block in anonymous functions

在这个例子中:

$foo = function () use (){
//     ^---------^ what is the use?

}

除了作为函数之外,我们还可以使用 use () 部分将数据导入函数,就像常规函数一样:

function bar ($foo){

}

但我不明白 function () 部分有什么用?

例如:

$a = 1;
$foo = function ($b, $c) use ($a)
{
    echo $a . PHP_EOL;
    echo $b . PHP_EOL;
    echo $c . PHP_EOL;
};

$foo(2, 3);
$a = 5;
$foo(7, 8);

会输出:

1
2
3
1
7
8

$b, $c - 将是您在执行时传递的参数。 $a 创建时 bound/imported。所以如果你在 $foo 定义之后改变它,它不会改变。

参数块用于输入参数。所以如果我定义

$foo = function($bar) use ($baz) {
    return $bar + $baz;
}

然后我,比如说,将 $foo 传递给另一个函数或将其绑定到另一个 class,我可以这样做

function bonk($bar, $foo) {
  $baz = 4;
  return $foo($bar);
}

在其他地方调用

// Returns 7
bonk(3, $foo);

一个允许您从上下文中获取变量,而另一个必须传入。例如,我在定义 $bonk 的 class 中有 $baz 可供我使用,所以我将其传入,但是我还不知道 $bar 会是什么,直到它在其他地方被调用并传入 $bar。

好吧,假设我是一个名为 Cats 的 class,我有一个对象 SiameseCat 可供我使用。我有一个名为 doTheThing 的方法,它接受一个函数和一个参数。它告诉猫该做什么,以及选择做什么。所以它总是有相同的猫,但取决于我从哪里称呼它,我可以让暹罗猫对不同的名词做不同的动词,但我知道这是我的猫做的,因为那是我定义猫的地方。