PHPにおけるyieldキーワードの役割と例

WBOY
リリース: 2023-06-28 18:48:02
オリジナル
1431 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート