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 ジェネレーターの簡単な例、php Generator_PHP チュートリアル
以上がPHPジェネレーターの説明と簡単な使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。