この記事では、PHP5.5の反復ジェネレーターの使用例を例付きで解説しています。参考のために皆さんと共有してください。詳細は次のとおりです:
PHP5.5 では反復ジェネレーターの概念が導入されています。反復ジェネレーターは PHP の新しい機能です。これは Python3 の反復ジェネレーターと似ています。 PHP5.5 の反復 ジェネレーターの定義方法。
リーリーキーワード: yield に注意してください。これが、この関数 xrange と以前の関数の違いです。通常、値が返され、yield の値は、この反復子がループするたびにこの値を生成するため、反復ジェネレーター関数は、生成されるたびに foreach ループを実行できます。価値。
PHP5.5 より前は、Iterator インターフェイスを実装するクラスを定義することによってイテレーターが構築されていましたが、yield を通じてイテレーターを構築すると、パフォーマンスがさらに向上し、システムのオーバーヘッドが節約されます。
この方法の利点は明らかです。大量のデータ コレクションを一度にメモリにロードせずに処理できるほか、無限大のデータ ストリームを処理することもできます。
上記の例に示すように、この反復子の機能は 1 から 1000000 までの数値を生成し、ループで出力することです。前の方法を使用して 1 から 1000000 までの数値を配列に生成すると、膨大な量の数値が必要になります。すべての結果は使用時にオンデマンドではなく事前に生成される必要があるため、大量のメモリが必要になります。つまり、xrange イテレータが呼び出されるとき、内部の関数は各反復まで実際には実行されません。
PHP 公式 Web サイトの例を見てください:
リーリー ここでの xrange は反復であり、その機能は range と同じです。 range 関数が使用される場合、関数の内部実装は各反復の中間プロセスを保存します。つまり、各中間変数にはメモリ空間があります。プログラムが最初に使用するメモリ空間が大きいため、メモリの割り当てとメモリの再利用によりプログラムの実行時間が長くなります。しかし、yield によって実装された xrange 関数を使用すると、その中のすべての中間変数は 1 つのメモリ $i のみを使用するため、節約される時間とスペースは小さくなります。それでは、なぜ収量にこれほどの影響があるのでしょうか? Lua の歩留まりを考えると、コルーチンの概念がここにあります。 Lua 言語では、プログラムが yield に達すると、コルーチンを使用してコンテキスト環境が記録され、その後、プログラムの操作権が main 関数に返され、main 関数が再開すると、コルーチンが再び起動され、 yield レコードが読み取られます。これにより、プログラミング言語レベルでマルチコルーチン操作が形成されます。 PHP 5.5 の yield にも同じことが当てはまります。プログラムが yield するために実行されると、現在のプログラムはコルーチンを呼び出してコンテキストを記録し、その後 main 関数が動作し続けます。ただし、PHP では、resume などのキーワードは使用されません。ただし、「コルーチンが呼び出されたときに使用します。たとえば、上記の例の foreach 反復子は収量を呼び出すことができます。したがって、上の例は理解できます。
さらに PHP 関連のコンテンツに興味のある読者は、このサイトの特別トピック「PHP Office ドキュメント操作スキルのまとめ (word、excel、access、ppt を含む)」、「PHP の日付と時刻の使用方法のまとめ」をチェックしてください。 , 『phpオブジェクト指向プログラム』設計入門チュートリアル』『php文字列(ストリング)使い方まとめ』『php+mysqlデータベース操作入門チュートリアル』『php共通データベース操作スキルまとめ』
この記事が PHP プログラミングのすべての人に役立つことを願っています。
興味があるかもしれない記事: