1
0

More than 3 years have passed since last update.

PHP ジェネレータについて

Posted at

ジェネレーター

ジェネレータを使えば、シンプルな イテレータを簡単に実装できます。 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 できる値がなくなると、ジェネレータは終了する。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0