この記事では、php での yield の使用法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
PHP にはコルーチンがあると聞いたことがあったので、調べて勉強しました。
デモが私の github ノートにアップロードされました
実行メモリのボトルネックを解決します。PHP プログラムの変数はメモリに保存されます。 Excel ファイルを読み取るときに、メモリが不足し、エラー メッセージが表示されます:
Fatal Error: Allowed memory size of xxxxxx bytes
したがって、php の最大実行メモリ設定が設定されます: ini_set('memory_limit', '200M ')
しかし、「5g もの大きなファイルをフェッチするとき、実行中のメモリを処理できない可能性がある」を読むと、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; }
時間は同じです。 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; }
時間間隔は 1 秒であるため、yield の例を通して、最初の例のようにコンテンツを保存するのではないことがわかります。 for ループはメモリ内にありますが、1 つずつ消費されます。
txt ファイルを作成して次のように記述します。
第1行 第2行 第3行 第4行 第5行 第6行 第7行 第8行
<?php function readTxt() { # code... $handle = fopen("./test.txt", 'rb'); while (feof($handle)===false) { # code... yield fgets($handle); } fclose($handle); } foreach (readTxt() as $key => $value) { # code... sleep(1); echo $value; }
php を使用してファイルを読み取ります。ファイルは 1 行ずつ読み取られます。
この時点で、yield の関数についてはおそらく理解していると思いますが、その後、さらに詳しく見ていきます。
推奨学習: php ビデオ チュートリアル
以上がPHPでのyieldの使用法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。