Maison >développement back-end >tutoriel php >Explication détaillée des fonctions et de l'utilisation du générateur PHP

Explication détaillée des fonctions et de l'utilisation du générateur PHP

小云云
小云云original
2018-03-19 09:57:541802parcourir

Cet article vous présente principalement les fonctions et l'utilisation du générateur PHP, et analyse le concept, la fonction, l'utilisation et les précautions de fonctionnement associées du générateur PHP sous forme d'exemples.

1. Description officielle : les générateurs offrent un moyen plus simple d'implémenter une itération d'objet simple. Par rapport à la définition d'une classe pour implémenter l'interface Iterator, la surcharge de performances et la complexité sont bien plus réduites. Les générateurs vous permettent d'écrire du code dans un bloc foreach pour parcourir un ensemble de données sans créer de tableau en mémoire.

2. Le générateur est comme une fonction personnalisée ordinaire. Contrairement aux fonctions ordinaires qui ne renvoient qu'une seule fois, le générateur peut produire autant de fois que nécessaire pour générer des valeurs qui doivent être itérées.

3. Exemples de code :

//未使用生成器
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. Exemples d'applications pratiques


/**
 * 大量数据生成示例
 * @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]);
//    }

Recommandations associées :

Explication du générateur PHP et utilisation simple

introduction détaillée du générateur PHP

introduction et exemples du générateur PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn