ホームページ >バックエンド開発 >PHPの問題 >PHPでのyieldの使用法は何ですか

PHPでのyieldの使用法は何ですか

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-05-27 17:35:462669ブラウズ

この記事では、php での yield の使用法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

PHPでのyieldの使用法は何ですか

PHP にはコルーチンがあると聞いたことがあったので、調べて勉強しました。

デモが私の github ノートにアップロードされました

yield 問題が解決されました

実行メモリのボトルネックを解決します。PHP プログラムの変数はメモリに保存されます。 Excel ファイルを読み取るときに、メモリが不足し、エラー メッセージが表示されます:

Fatal Error: Allowed memory size of xxxxxx bytes

したがって、php の最大実行メモリ設定が設定されます: ini_set('memory_limit', '200M ')

しかし、「5g もの大きなファイルをフェッチするとき、実行中のメモリを処理できない可能性がある」を読むと、yield

Yield の最初の知識

を選択します。

Run:

<?php
function createRange($number){
    $data = [];
    for($i=0;$i<$number;$i++){
        $data[] = time();
    }
    return $data;
}
$data =createRange(10);
foreach($data as $value){
    sleep(1);//这里停顿1秒,我们后续有用
    echo $value.PHP_EOL;
}

PHPでのyieldの使用法は何ですか

時間は同じです。 yield が使用される場合:

<?php

function createRange($number){
    for($i=0;$i<$number;$i++){
        yield time();
    }
}
$data =createRange(10);
foreach($data as $value){
    sleep(1);//这里停顿1秒,我们后续有用
    echo $value.PHP_EOL;
}

PHPでのyieldの使用法は何ですか

時間間隔は 1 秒であるため、yield の例を通して、最初の例のようにコンテンツを保存するのではないことがわかります。 for ループはメモリ内にありますが、1 つずつ消費されます。

ファイルの読み取りの例

txt ファイルを作成して次のように記述します。

第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
<?php
function readTxt()
{
    # code...
    $handle = fopen("./test.txt", &#39;rb&#39;);

    while (feof($handle)===false) {
        # code...
        yield fgets($handle);
    }

    fclose($handle);
}

foreach (readTxt() as $key => $value) {
    # code...
    sleep(1);
    echo $value;
}

php を使用してファイルを読み取ります。ファイルは 1 行ずつ読み取られます。

PHPでのyieldの使用法は何ですか

この時点で、yield の関数についてはおそらく理解していると思いますが、その後、さらに詳しく見ていきます。

推奨学習: php ビデオ チュートリアル

以上がPHPでのyieldの使用法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。