访问laravel闭包函数外的变量



我使用的是Laravel 8和PHP 8。

我在全局作用域中定义了一个变量,并为其赋值为null

我使用laravel的集合的each函数来迭代每个元素。在这个闭包中,我有另一个闭包,它是collection的filter函数。我将过滤器function的输出分配给全局变量,它正在工作,但仅在each函数的闭包内。(使用xdebug检查)

在闭包之外,变量再次变为null,即使我使用use()函数将变量传递到闭包内部,但仍然不起作用。

$filtered = null;
$product->each(function ($price) use($coupons, $filtered) {
$filtered = $coupons->filter(function ($coupon) use($price) {
if (!empty($price->iso_code)) {
if ($coupon->iso_code = $price->iso_code) {
$a = $price->currency_code;
$b = $coupon->currency_code;
return $a == $b;
}
}
return $price->currency_code = $coupon->currency_code;
});
});
return $filtered; //null

我参考了这个答案&这也可惜运气不好。

有人可以指导我如何分配filter函数的输出到全局变量?

要获得闭包外的更改效果,需要使用引用,如

PHP文档。

$filtered = null;
$product->each(function ($price) use($coupons, &$filtered) {
$filtered = $coupons->filter(function ($coupon) use($price) {
if (!empty($price->iso_code)) {
if ($coupon->iso_code = $price->iso_code) {
$a = $price->currency_code;
$b = $coupon->currency_code;
return $a == $b;
}
}
return $price->currency_code = $coupon->currency_code;
});
});
return $filtered;

最新更新