匿名函数中参数块的用途是什么

时间:2015-01-07 22:10:46

标签: php anonymous-function

在这个例子中:

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

}

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

function bar ($foo){

}

但我不明白function ()部分可以用于什么?

2 个答案:

答案 0 :(得分:6)

例如:

$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 。因此,如果你在$ foo定义之后改变它,它就不会改变。

答案 1 :(得分:2)

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

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

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

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

以及其他地方的电话

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

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

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