PHP8.0 バージョンでは、新機能である非同期イテレータが追加されました。この機能の登場により、PHP は非同期プログラミングにおいてより柔軟かつ強力になります。この記事では、PHP8.0における非同期イテレータの定義、機能、使い方、例を詳しく紹介します。
1. 非同期イテレータとは何ですか?
ほとんどの人は、PHP の反復子 (Iterator) の概念に精通しています。これは、手動でループを作成せずに、一部の特殊なデータ構造 (配列、コレクションなど) を走査するのに役立ちます。 PHP8.0 には、非同期イテレータという新しい概念があり、これはいくつかの特別なデータ構造の非同期トラバーサルとして定義されます。
簡単に言えば、非同期イテレータはデータを非同期的に走査するのに役立ち、コードをより柔軟かつ効率的にすることができます。
2. 非同期イテレータの役割は何ですか?
従来のイテレータは、結果を返す前にトラバーサル プロセスが完了するまで待つ必要がありますが、非同期イテレータを使用すると、トラバーサル プロセス中にデータを非同期に処理できます。これは、時間に敏感なアプリケーションや大量のデータを処理するアプリケーションに役立ちます。
たとえば、大規模なデータベース クエリを処理する場合や、API から大量のデータを取得する場合、非同期イテレータを使用すると、非同期方法でオンデマンドでデータを読み込んで処理できるため、待ち時間が短縮され、アプリケーションの処理が高速化されます。
3. 非同期イテレーターの使用方法
非同期イテレーター クラスを使用するには、コールバック メソッド getAsyncIterator()
および fetchAsync()# を実装する必要があります。 ##。このうち、
getAsyncIterator() メソッドは、
AsyncIteratorInterface インターフェイスを実装する非同期イテレータ オブジェクトを返し、
fetchAsync() メソッドは、Get 要素の待機可能オブジェクトを返します。非同期的に。
class MyAsyncIterator implements AsyncIteratorInterface { public function getAsyncIterator(): AsyncIteratorInterface { return $this; } public async function fetchAsync(): Promise { return await $this->getNextDataFromSource(); } private async function getNextDataFromSource() { //异步加载数据 return 'next data'; } }
MyAsyncIterator クラスは
AsyncIteratorInterface インターフェイスを実装しています。
getAsyncIterator() メソッドと
fetchAsync() メソッドは、データを非同期に走査して要素を取得するために使用されます。
class MyAsyncIterable implements AsyncIteratorInterface { private int $max; public function __construct(int $max) { $this->max = $max; } public function getAsyncIterator(): AsyncIteratorInterface { return $this; } public async function fetchAsync(): Promise { if ($this->max <= 0) { return null; } $toDelay = rand(1, 3); $this->max -= $toDelay; await new ReactPromiseTimerInterval($toDelay * 1000); return $this->max; } } class App { public static async function main(Array $args) { $asyncIterable = new MyAsyncIterable(10); foreach ($asyncIterable as $number) { echo "Delay: $number "; } } } App::main($argv)->done();
MyAsyncIterable クラスを作成し、
App クラスの foreach ループを使用して配列要素を非同期的に出力しました。 . .実行中に、プログラムにそれぞれサイズの異なる 10 個の乱数を生成させ、それらから時間 (1 ~ 3 秒) をランダムに選択して、データの非同期ロードをシミュレートします。
Delay: 7 Delay: 5 Delay: 2 Delay: -1
fetchAsync メソッドが
null 値を返した場合、トラバーサルが完了したことを意味します。 。
以上がPHP8.0の非同期イテレータの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。