この記事では、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ジェネレーターの機能と使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。