关于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 できる値がなくなると、ジェネレータは終了する。