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

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

醉折花枝作酒筹
リリース: 2023-03-10 06:24:02
転載
2674 人が閲覧しました

この記事では、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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート