PHP: ジェネレーター
October 6, 2020
関数で function
ではなく yield
を使うとジェネレーターとなる。
<?php
function myGenerator() {
yield 1;
yield 2;
yield 3;
}
foreach(myGenerator() as $i) {
echo $i . "\n";
}
1
2
3
ジェネレーターを使ったフィボナッチ関数 #
<?php
function myFib() {
$a = 0;
$b = 1;
for (; $c < 10000;) {
$c = $a + $b;
yield $c;
$a = $b;
$b = $c;
}
}
foreach(myFib() as $i) {
echo $i . "\n";
}
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
ジェネレーターの利点 #
- 全ての結果を計算して返すのではないので場合によってはメモリ効率が良い
- 関数内で状態を保持する=状態を保持するオブジェクトを簡潔に書ける