Laravel PHP:如何在map函数内部访问外部变量?
解决Laravel集合map闭包中访问外部变量的问题
你碰到的这个错误是因为PHP的匿名函数(闭包)默认不会自动继承外部作用域的变量,所以在map的回调里直接调用$x会提示未定义。要让闭包能访问外部的$x,只需要在闭包的参数列表后面加上use ($x)声明即可。
修正后的完整代码示例
public function test() { $x = 10; $collection = collect([0, 10, 20]); $collection = $collection->map(function ($item, $key) use ($x) { return $item + $x; }); // 此时$collection的结果会是 [10, 20, 30] }
额外说明
- 如果后续需要在闭包里修改外部的
$x变量,要在use里加上引用符号&,写成use (&$x);不过你的场景只需要读取$x,所以不需要引用。 - 这是PHP闭包的原生特性,和Laravel集合本身无关,所有PHP匿名函数要访问外部作用域变量,都得通过
use关键字明确声明要捕获的变量。
内容的提问来源于stack exchange,提问作者Janaka Pushpakumara
相关产品推荐
相关产品推荐

