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 递增不会产生错误 - 但我认为这不是“好的做法”。

您可以使用初始化一次的 static 变量。

echo array_reduce(['a', 'b', 'c'], function($output, $item) { static $count = 0; return $output . ++$count . '. ' . $item . "\n"; }, '');

演示:https://3v4l.org/D0Nv2