提问人:lm713 提问时间:5/27/2022 更新时间:5/27/2022 访问量:47
php 初始化匿名函数/闭包的“use”变量
php initialize "use" variable for anonymous function / closure
问:
有没有一种巧妙的方法来初始化闭包中使用的变量?
function() use($v = 0) { echo ++$v }
...不起作用
一个示例用例是array_reduce,我们可能想要计算数组元素...
echo array_reduce(['a', 'b', 'c'], function($output, $item) use(&$count) { return $output . ++$count . '. ' . $item . "\n"; }, '');
这将起作用 - 通过引用声明$count并从 null 递增不会产生错误 - 但我认为这不是“好做法”。
答:
1赞
Chris Haas
5/27/2022
#1
您可以使用初始化一次的变量。static
echo array_reduce(['a', 'b', 'c'], function($output, $item) { static $count = 0; return $output . ++$count . '. ' . $item . "\n"; }, '');
评论
0赞
lm713
5/27/2022
太棒了,谢谢:-)这真的很整洁,我希望对性能的影响很小或没有影响 - php 只是跳过后续迭代的行?我现在将实施它:-)
0赞
Álvaro González
5/28/2022
@lm713 此变量是函数内部的,您不能从外部读取它。这可能是您从一开始就真正想到的,但值得注意的是,它并不是真正的替代实现,而是不同的东西。
0赞
lm713
5/28/2022
@ÁlvaroGonzález谢谢你 - 是的,你是对的,这并不完全是我的想法,但它似乎是最接近可用的东西,并且适合示例用例,所以我将把它作为公认的答案,直到 PHP 使类似的东西成为可能。另一方面,如果父作用域中需要 $v,我认为在闭包声明之外初始化它并不那么混乱。use($v=0)
评论
use