🙄

【PHP】 yieldの使い方とサンプル

2021/03/07に公開

https://eh-career.com/engineerhub/entry/2020/05/14/103000

上の記事を見ていたら出てきた yieldの使い方を理解していなかったのでまとめた。

<?php
function fib() {
    list($a, $b) = [1, 1];
    while (true) {
        yield $b;
        list($a, $b) = [$b, $a + $b];
    }
}
foreach (fib() as $n) {
   if ($n > 1000) break;
   var_dump($n);
}

#ジェネレータを使ったrange()のサンプル
php.netより

<?php
function xrange($start, $limit, $step = 1) {
   if ($start <= $limit) {
       if ($step <= 0) {
           throw new LogicException('Step must be positive');
       }

       for ($i = $start; $i <= $limit; $i += $step) {
           yield $i;
       }
   } else {
       if ($step >= 0) {
           throw new LogicException('Step must be negative');
       }

       for ($i = $start; $i >= $limit; $i += $step) {
           yield $i;
       }
   }
}

/*
* 次の例で、range() と xrange() が同じ結果を返すことに注目しましょう
*/

echo 'Single digit odd numbers from range():  ';
foreach (range(1, 9, 2) as $number) {
   echo "$number ";
}
echo "\n";

echo 'Single digit odd numbers from xrange(): ';
foreach (xrange(1, 9, 2) as $number) {
   echo "$number ";
}
?>

関数を作って、そこで配列を作るような形で書く。あとはforeachで取り出す感じ。

Discussion