有人能帮我理解这个场景的变量范围吗?我有一个变量$i
,我在闭包中访问这个变量,然后增加它。但是,当我在闭包外打印变量$i
时,它会打印0
(初始值(。如何确保可以从外部访问变量$i
中的效果?
class ImportsController{
public function sync()
{
$i = 0;
LazyCollection::make(function () use (&$csv_data) {
$datas = $csv_data;
foreach ($datas as $line) {
if (count($line) == $key_count && !containsOnlyNull($line)) {
yield $line;
}
}
})
->chunk(50)
->each(function ($lines) use (&$i) {
foreach ($lines as $chunk) {
if ($lines) {
$i++;
}
}
});
echo $i;
}
}
您可以为此在类上使用一个私有变量:
class ImportsController{
private $i;
public function sync()
{
$this->i = 0;
LazyCollection::
...
->each(function ($lines) {
foreach ($lines as $chunk) {
if ($lines)
$this->i++;
}
});
echo $this->i;
}
}