PHP 生成器真实案例

问题描述 投票:0回答:1

您能分享一下您使用 PHP 生成器时的真实案例吗? 我尝试了解它,但找不到使用生成器的真实用例 非常感谢!


function getLines($file) {
    $f = fopen($file, 'r');
    try {
        while ($line = fgets($f)) {
            yield $line;
        }
    } finally {
        fclose($f);
    }
}

foreach (getLines("file.txt") as $n => $line) {
    if ($n > 5) break;
    echo $line;
}


php symfony backend generator php-8
1个回答
0
投票

如果对普通数组这样做,会导致性能和内存错误,但由于是用 Generator 完成的,所以不会有问题。

function infinite_numbers(): Generator
{
    for ($i = 0; $i < PHP_INT_MAX; $i++) {
        $message = yield $i;
        if ($message === 'stop') {
            break;
        }
    }
}

$infinite = infinite_numbers();

foreach ($infinite as $value) {

    if ($value === 10) {
        $infinite->send('stop');
    }
    echo $value . PHP_EOL;
}

© www.soinside.com 2019 - 2024. All rights reserved.