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 중국어 웹사이트의 기타 관련 기사를 참조하세요!