ジェネレーターを説明する前に、イテレーターを紹介します。
PHP では、通常、配列を走査するために foreach を使用します。
オブジェクトを通過可能にしたい場合はどうすればよいでしょうか?
PHP は Iterator インターフェイスを提供します。このインターフェイスが実装されている限り、このオブジェクトは foreach を通じて反復できます。
例は次のとおりです:
foreach を介して $it をトラバースすると、PHP はそれ自体を順番に呼び出します:
rewind( ) 最初の要素にリセットします
valid() は現在の位置が有効かどうかを確認します
current() は現在の要素を返します
key() は現在の要素のキーを返しますelement
next() は次の要素を指します
ジェネレーターは PHP 5.5 で導入された新機能ですが、現在使用している人はほとんどいないようです。
php ジェネレーターとは何ですか?
以下は、公式 PHP ドキュメントからのジェネレーターの説明です。
ジェネレーターは、イテレーター インターフェイスを実装するクラスを定義するのと比較して、単純なオブジェクトの反復を実装する簡単な方法を提供します。アプローチにより、パフォーマンスのオーバーヘッドと複雑さが大幅に軽減されます。
ジェネレーターを使用すると、メモリ内に配列を作成せずに、foreach ブロックにコードを記述してデータ セットを反復処理できます。これにより、メモリ制限に達したり、かなりの処理時間がかかってしまいます。代わりに、通常のカスタム関数と同じようにジェネレーター関数を作成できます。通常の関数が 1 回だけ返すのではなく、ジェネレーターは必要に応じて何度でも生成して、反復する必要がある値を生成できます。
ジェネレーターの利点を反映するために、以下で比較用の関数を定義します。
これほど大きな配列を反復のためにメモリに作成するため、この場合、PHP は単一プロセスのメモリ制限を超えたことを直接通知します。
ジェネレーター メソッドに切り替えましょう:
func1() を呼び出して、反復ごとに使用できる Generator オブジェクトを返すことがわかります。反復ごとに、PHP はジェネレーター インスタンスに、反復される次の値を計算して提供するように要求します。ジェネレーターの優れた点は、値が生成されるたびにジェネレーターの内部状態が一時停止され、ジェネレーターから次の値が要求されると内部状態が復元されることです。ジェネレーターの内部状態は、関数定義本体の終わりに到達するか、空の return ステートメントに遭遇するまで、一時停止と再開の間で切り替わり続けます。
以上がPHPジェネレーターとは何ですか?例を挙げて PHP ジェネレーターを理解するのに役立つ 10 分の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。