Php 参数块在匿名函数中有什么用途
在本例中:Php 参数块在匿名函数中有什么用途,php,anonymous-function,Php,Anonymous Function,在本例中: $foo = function () use (){ // ^---------^ what is the use? } 除此之外,我们还可以使用use()部分将数据导入函数,就像中的常规函数一样: function bar ($foo){ } 但是我不明白函数()部分可以用来做什么 例如: $a = 1; $foo = function ($b, $c) use ($a) { echo $a . PHP_EOL; echo $b . PHP_EOL;
$foo = function () use (){
// ^---------^ what is the use?
}
除此之外,我们还可以使用use()
部分将数据导入函数,就像中的常规函数一样:
function bar ($foo){
}
但是我不明白函数()
部分可以用来做什么 例如:
$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定义之后更改它,它将不会更改。例如:
$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定义之后更改它,它将不会更改。参数块用于输入参数。所以如果我定义
$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将是什么,直到它在传入$bar的其他地方被调用
好吧,让我们假设我是一个名为Cats的类,我有一个对象可以使用。我有一个名为doTheThing的方法,它接受一个函数和一个参数。它告诉猫该做什么,也可以选择对它做什么。所以它总是有相同的猫,但取决于我从哪里叫它,我可以让暹罗猫对不同的名词做不同的动词,但我知道是我的猫做的,因为这就是我定义猫的地方。参数块用于输入参数。所以如果我定义
$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将是什么,直到它在传入$bar的其他地方被调用
好吧,让我们假设我是一个名为Cats的类,我有一个对象可以使用。我有一个名为doTheThing的方法,它接受一个函数和一个参数。它告诉猫该做什么,也可以选择对它做什么。所以它总是有同一只猫,但取决于我从哪里叫它,我可以让暹罗猫对不同的名词做不同的动词,但我知道是我的猫做的,因为这就是我定义猫的地方。问题不清楚<代码>函数标记用于告诉解析器它是一个函数。
函数
标记后面的括号告诉解析器“这里是定义参数的地方”@zerkms在本例中:函数()使用(){}
部分导入函数范围内的任何内容,这意味着它正在做普通函数正在做的事情,但是在这种情况下,第一个括号怎么样?它是用来干什么的?它应该是空的吗?使用匿名函数作为各种USORT的回调需要两个值的函数参数进行比较。使用
用于附加值。e、 g.usort($array,function($a,$b){返回strnatcmp($a,$b);})
并与usort($array,function($a,$b)use($key){return strnatcmp($a[$key],$b[$key]);}进行比较@Contax“这意味着,它正在做一个正常函数正在做的事情”——一点也不。你可能误解了use
的用法。问题不清楚<代码>函数标记用于告诉解析器它是一个函数。函数
标记后面的括号告诉解析器“这里是定义参数的地方”@zerkms在本例中:函数()使用(){}
部分导入函数范围内的任何内容,这意味着它正在做普通函数正在做的事情,但是在这种情况下,第一个括号怎么样?它是用来干什么的?它应该是空的吗?使用匿名函数作为各种USORT的回调需要两个值的函数参数进行比较。使用
用于附加值。e、 g.usort($array,function($a,$b){返回strnatcmp($a,$b);})
并与usort($array,function($a,$b)use($key){return strnatcmp($a[$key],$b[$key]);}进行比较@Contax“这意味着,它正在做一个普通函数正在做的事情”——一点也不。你可能误解了use
的用法。但是如果你想计算$bar+$baz
,你可以通过use($bar,$baz)
将它们都传递给use($bar,$baz)
,所以这仍然不能回答为什么我们需要第一个括号“$bonk(3,$foo);”应该是‘邦克(3,$foo);’但是如果你想计算$bar+$baz
,你可以通过use($bar,$baz)
传递它们,所以这仍然不能回答为什么我们需要第一个括号“$bonk(3,$foo);”应该是‘邦克(3,$foo);’不同之处在于函数每次调用时都读取参数,而不是use
key?@Contax之类的东西。不同之处在于函数每次调用时都读取参数,而不是use
key?@Contax之类的东西。