PHP の yield キーワードは、PHP 5.5 で導入されたキーワードであり、関数内でジェネレーターを作成するために使用できます。ジェネレーターを使用すると、データ セット全体を一度にメモリにロードせずに、大規模なデータ セットを反復処理できます。
yield キーワードは、現在の関数をジェネレーター関数に変換することです。ジェネレーター関数内で、yield ステートメントを使用して呼び出し元に値を返すことができ、ジェネレーター関数の実行ステータスが保存されます。次回ジェネレーター関数が呼び出されるとき、実行は最後の yield ステートメントから継続されます。
次に、サンプル コードを使用して、yield キーワードの役割を説明します。
まず、1 から 10 までの整数シーケンスを生成する単純なジェネレーター関数を作成しましょう:
function generateNumbers() { for ($i = 1; $i <= 10; $i++) { yield $i; } } foreach (generateNumbers() as $number) { echo $number . " "; }
上記のコードの出力は次のとおりです: 1 2 3 4 5 6 7 8 9 10
この例では、generateNumbers() 関数はジェネレーター オブジェクトを返します。 foreach ループを通じてこのジェネレーター オブジェクトを走査し、各走査で yield ステートメントから値を返します。この利点は、シーケンス全体を一度にメモリに保存する必要がなく、対応する値が生成され、オンデマンドで返されることです。
次に、より実践的な例を見てみましょう。非常に大きなファイルを読み取る必要があるが、ファイル全体を一度にメモリにロードするとメモリ オーバーフローの問題が発生するとします。この時点で、ジェネレーター関数を使用してファイルを 1 行ずつ読み取ることができます。
function readFileByLine($file) { $handle = fopen($file, "r"); if ($handle) { while (($line = fgets($handle)) !== false) { yield $line; } fclose($handle); } } foreach (readFileByLine("big_file.txt") as $line) { echo $line; }
上記のコードは、ファイルの内容を 1 行ずつ読み取り、各行の内容を呼び出し元に返します。こうすることで、ファイル全体を一度にメモリにロードせずに、一度に 1 行を読み取ることができます。
関数内で yield キーワードを使用してジェネレーター関数を作成するだけでなく、反復可能オブジェクトで yield キーワードを使用して、より複雑な関数を実装することもできます。 yield キーワードを使用すると、独自の反復ルールを定義し、カスタマイズされた走査メソッドを提供できます。
要約すると、PHP の yield キーワードの機能は、オンデマンドで値を生成して返すジェネレーター関数を作成することです。ジェネレーター関数は、大規模なデータ セットの走査や大規模なファイルの 1 行ずつの読み取りなどのシナリオで使用して、メモリのオーバーヘッドを削減できます。 yield キーワードを使用すると、コードの実行効率が向上し、メモリ消費量が削減されます。
以上がPHPにおけるyieldキーワードの役割と例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。