ジェネレーター
ジェネレータを使えば、シンプルな イテレータを簡単に実装できます。 Iterator インターフェイスを実装したクラスを用意する オーバーヘッドや複雑さを心配する必要はありません。
PHP: ジェネレータとは - Manual
- ジェネレータは前方にしか進めないイテレータである。
- 反復処理が始まれば巻き戻すことはできない。
- 一度だけ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 できる値がなくなると、ジェネレータは終了する。