关于PHP生成器

发电机

如果使用生成器,可以轻松实现简单的迭代器。无需担心编写实现Iterator接口的类的开销和复杂性。
PHP:生成器 – 手册

    • ジェネレータは前方にしか進めないイテレータである。

 

    • 反復処理が始まれば巻き戻すことはできない。

 

    • 一度だけreturnするのでなく、必要に応じて何度も yield することができる。

 

    遅延評価を作る時に使える。
<?php
function gen_one_to_three()
{
    for ($i = 1; $i <= 3; $i++) {
        yield $i;
    }
}

$generator = gen_one_to_three();
foreach ($generator as $value) {
    echo $value,PHP_EOL;
}
/*
1
2
3
*/
    • ジェネレータ関数が呼ばれると、反復処理が可能なオブジェクトを返す。(このオブジェクトは Iterator インターフェイスを実装しており、前方にしか進めない)

 

    • このオブジェクトを (foreach ループなどで) 反復させると、 値が必要になるたびにPHPがオブジェクトの反復メソッドを呼ぶ。

 

    • ジェネレータが値を yield した時点の状態を保存しておき、 次に値が必要になったときにはそこから再開できる。

 

    yield できる値がなくなると、ジェネレータは終了する。
广告
将在 10 秒后关闭
bannerAds