提问人: 提问时间:5/1/2022 最后编辑:Dharman 更新时间:5/2/2022 访问量:185
函数参数与在匿名函数中使用关键字参数?
Functions arguments vs use keyword argument in anonymous function?
问:
我们经常会遇到一个问题,我们在PHP中使用了一些闭包,当我在我的项目中使用Laravel时,闭包在框架中被大量使用 就像在雄辩的查询中一样
所以这里有一个场景
$name = "john doe";
$greet = function() use ($name) {
echo "hi " . $name;
echo "\n";
};
$greetAgain = function($name) {
echo "hi " . $name;
};
$greet();
$greetAgain($name);
现在我得到的输出是
hi john doe
hi john doe
看,根本没有区别,但根据闭包,我使用了两种方法,一种是
在函数的参数中传递的名称
在 use 关键字中传递的名称
但是由于没有区别,我只是想知道这两种不同方法获得相同结果的主要原因是什么
是的,我也知道使用关键字是因为匿名函数不能有外部范围
另外,我只是想知道何时使用哪种方法
我也问过这个问题,它出现了这个问题,在php中使用标识符以及它如何影响逻辑
答:
2赞
IMSoP
5/1/2022
#1
这两者似乎做同样的事情的原因是你过度简化了你的示例,并在你创建它后立即使用了该函数。在实际代码中,创建匿名函数的重点是在一个地方声明它,并在另一个地方使用它 - 例如,将其作为回调传递给 或 ;或多次重复使用。usort
array_map
很自然地,在两个不同的时间里,你可能有函数需要的数据,这就是声明的两个部分的用途:
- 定义函数时,可以使用子句“捕获”数据
use
- 执行函数时,可以使用参数传入数据
演示差异的更好示例可能是:
// We know the surname we want to use every time the function runs
// Maybe it actually comes from user input
// But we don't yet know what first name to use
$surname = "Smith";
$greet = function($firstname) use ($surname) {
echo "hi " . $firstname . " " . $name;
echo "\n";
};
// This might happen in a completely different part of the code
// We might no longer know the surname, but the closure remembers it for us
foreach ( ['John', 'Jane', 'Jimmy'] as $firstname ) {
$greet($firstname);
}
评论