Maison >développement back-end >tutoriel php >Comment utiliser le générateur PHP

Comment utiliser le générateur PHP

php中世界最好的语言
php中世界最好的语言original
2018-03-24 11:24:591535parcourir

Cette fois je vais vous montrer comment utiliser le générateur PHP et quelles sont les précautions lors de l'utilisation du générateur PHP Voici un cas pratique, jetons un oeil.

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. Différent de la fonction ordinaire qui ne renvoie qu'une seule fois, le générateur peut produire autant de fois que nécessaire pour générer l'itération nécessaire. avoir de la valeur.

3. Exemples de code :

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

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

Je pense que vous maîtrisez la méthode après avoir lu le cas présenté dans cet article. faites attention aux choses plus excitantes. Autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

PHP implémente directement la génération d'affiches publicitaires

Explication détaillée de la classe phpqrcode pour générer du code QR

Comment obtenir les paramètres HTTP dans Egg.js

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