Home  >  Article  >  Backend Development  >  Detailed explanation of the functions and usage of PHP generator

Detailed explanation of the functions and usage of PHP generator

小云云
小云云Original
2018-03-19 09:57:541709browse

This article mainly introduces the functions and usage of the PHP generator to you, and analyzes the concept, functions, usage and related operation precautions of the PHP generator in the form of examples. I hope it can help you.

1. Official description: Generators provide an easier way to implement simple object iteration. Compared with defining a class to implement the Iterator interface, the performance overhead and complexity are much greater. reduce. Generators allow you to write code in a foreach block to iterate over a set of data without creating an array in memory.

2. The generator is just like an ordinary custom function. Unlike ordinary functions that only return once, the generator can yield as many times as needed to generate values ​​that need to be iterated.

3. Code example:

//未使用生成器
echo &#39;开始内存:&#39;.getMemory().&#39;<br>&#39;;
$nums = range(0,1000000);
echo &#39;结束内存:&#39;.getMemory().&#39;<br>&#39;;
//输出结果
//开始内存:0.23M
//结束内存:130.31
//使用生成器
echo &#39;开始内存:&#39;.getMemory().&#39;<br>&#39;;
$nums = xrange(1000000);
function xrange($total)
{
  for ($i = 0; $i < $total; $i++) {
    yield $i;
  }
}
echo &#39;结束内存:&#39;.getMemory().&#39;<br>&#39;;
//输出结果
//开始内存:0.23M
//结束内存:0.23M

4. Practical application example


##

/**
 * 大量数据生成示例
 * @param int $page
 * @param int $limit
 * @return Generator
 */
public function generator($page = 1,$limit = 50000)
{
  while (true) {
    echo "第{$page}次".&#39;generator开始内存:&#39;.$this->getMemory().&#39;<br>&#39;;
    $start = ($page-1) * $limit;
    $sql = "SELECT p.id,p.wh_code,p.goods_sn FROM p_product as p WHERE p.wh_code LIKE &#39;%YB%&#39; OR p.wh_code LIKE &#39;%DZWH%&#39; LIMIT {$start},{$limit} ";
    $resultAll = db()->fetchAll($sql);
    yield $resultAll; //生成器
    if (count($resultAll) != $limit) {
      break;
    }
    echo "第{$page}次".&#39;generator结束内存:&#39;.$this->getMemory().&#39;<br>&#39;;
    $page++;
  }
}
    //测试生成器内存消耗
//    foreach ($this->generator() as $result) {
//      var_dump($result[0]);
//    }

Related recommendations:

PHP generator explanation and simple usage

php generator detailed introduction

php generator introduction and examples

The above is the detailed content of Detailed explanation of the functions and usage of PHP generator. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn