今回はPHPジェネレーターの使い方と、PHPジェネレーターを使用する際の注意点を紹介します。実際の事例を見てみましょう。
1. 公式説明: ジェネレーターは、Iterator インターフェースを実装するためのクラスを定義するのと比較して、単純なオブジェクトの反復を実装する簡単な方法を提供し、パフォーマンスのオーバーヘッドと複雑さが大幅に軽減されます。ジェネレーターを使用すると、メモリ内に配列を作成せずに、foreach ブロックにコードを記述して、一連のデータを反復処理できます。
2. ジェネレーターは、通常の カスタム関数 と同じです。一度だけ返される通常の関数とは異なり、ジェネレーターは反復する必要がある値を生成するために必要な回数だけ生成できます。
3. コード例:
//未使用生成器 echo '开始内存:'.getMemory().'<br>'; $nums = range(0,1000000); echo '结束内存:'.getMemory().'<br>'; //输出结果 //开始内存:0.23M //结束内存:130.31 //使用生成器 echo '开始内存:'.getMemory().'<br>'; $nums = xrange(1000000); function xrange($total) { for ($i = 0; $i < $total; $i++) { yield $i; } } echo '结束内存:'.getMemory().'<br>'; //输出结果 //开始内存:0.23M //结束内存:0.23M
4. 実用的なアプリケーションの例
/** * 大量数据生成示例 * @param int $page * @param int $limit * @return Generator */ public function generator($page = 1,$limit = 50000) { while (true) { echo "第{$page}次".'generator开始内存:'.$this->getMemory().'<br>'; $start = ($page-1) * $limit; $sql = "SELECT p.id,p.wh_code,p.goods_sn FROM p_product as p WHERE p.wh_code LIKE '%YB%' OR p.wh_code LIKE '%DZWH%' LIMIT {$start},{$limit} "; $resultAll = db()->fetchAll($sql); yield $resultAll; //生成器 if (count($resultAll) != $limit) { break; } echo "第{$page}次".'generator结束内存:'.$this->getMemory().'<br>'; $page++; } } //测试生成器内存消耗 // foreach ($this->generator() as $result) { // var_dump($result[0]); // }
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、PHP 中国語 Web サイトの他の関連記事に注目してください。 !
推奨読書:
以上がPHPジェネレーターの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。