ホームページ  >  記事  >  バックエンド開発  >  PHP の高度な機能: ジェネレーターとイテレーターの素晴らしい使い方

PHP の高度な機能: ジェネレーターとイテレーターの素晴らしい使い方

WBOY
WBOYオリジナル
2024-06-01 20:44:00979ブラウズ

回答: ジェネレーターとイテレーターは、データセット全体を保存せずに値を 1 つずつ生成できる特別な関数およびオブジェクトです。ジェネレーター: 呼び出しごとに 1 つの値を含む一連の値を生成します。 イテレーター: コレクション要素にアクセスするメソッドを提供し、トラバース時に要素を生成します。 実用的な戦闘: データ全体を保存せずに、ページごとにデータ セットを生成するために使用されます。メモリにセットされます。

PHP の高度な機能: ジェネレーターとイテレーターの素晴らしい使い方

PHP の高度な機能: ジェネレーターとイテレーターの魔法のような使い方

ジェネレーター

ジェネレーターは、一連の値を生成するために使用される特別な関数です。通常の関数とは異なり、ジェネレーターは値の配列全体をメモリに保存せずに、呼び出しごとに値を生成できます。

function numbersGenerator() {
  for ($i = 1; $i <= 10; $i++) {
    yield $i;
  }
}

foreach (numbersGenerator() as $number) {
  echo $number . "\n";
}

Iterator

イテレータは、コレクション内の要素にアクセスする方法を提供するオブジェクトです。ジェネレーターと同様に、イテレーターは、コレクション全体をメモリーに保管せずに、コレクションを反復処理しながら要素を生成できます。

class NumberIterator implements Iterator {
  private $start;
  private $end;
  private $current;

  public function __construct($start, $end) {
    $this->start = $start;
    $this->end = $end;
    $this->current = $start;
  }

  public function rewind() {
    $this->current = $this->start;
  }

  public function current() {
    return $this->current;
  }

  public function key() {
    return $this->current;
  }

  public function next() {
    $this->current++;
  }

  public function valid() {
    return $this->current <= $this->end;
  }
}

$iterator = new NumberIterator(1, 10);

foreach ($iterator as $number) {
  echo $number . "\n";
}

実際のケース: Paginator

ジェネレーターとイテレーターは、ページングのシナリオに非常に適しています。ジェネレーターまたはイテレーターを使用すると、データセット全体をメモリに保存せずに、ページごとにデータセットを生成できます。

りー

以上がPHP の高度な機能: ジェネレーターとイテレーターの素晴らしい使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。