PHP: ジェネレーター

PHP: ジェネレーター

October 6, 2020
PHP
PHP

関数で 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

ジェネレーターの利点 #

  • 全ての結果を計算して返すのではないので場合によってはメモリ効率が良い
  • 関数内で状態を保持する=状態を保持するオブジェクトを簡潔に書ける