Maison >développement back-end >tutoriel php >Analyse de tableaux (générateurs) qui génèrent dynamiquement du contenu en PHP

Analyse de tableaux (générateurs) qui génèrent dynamiquement du contenu en PHP

不言
不言original
2018-08-04 09:45:412550parcourir

Cet article vous présente l'analyse des tableaux (générateurs) de contenu généré dynamiquement en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Définition :

Générateur : "Un tableau de contenu généré dynamiquement", qui n'est produit que lorsque la valeur est utilisée.
Utilisé avec : mot clé rendement foreach

Processus :

  1. En tant que méthode génératrice, cela équivaut à définir un tableau

  2. Chaque occurrence de rendement dans le générateur équivaut à définir la valeur qui apparaît dans un tableau

  3. foreach parcourra toutes les valeurs de le générateur La valeur définie par rendement (une valeur définie (expression)) ne sera exécutée que lorsqu'elle est utilisée. Les autres expressions entre le rendement actuel et le rendement précédent ne seront pas exécutées );

  4. Si foreach se termine normalement (pas de pause), vérifiez s'il y a d'autres expressions après le dernier rendement dans le générateur qui n'ont pas été exécutées

  5. Différent des threads, il n'est pas exécuté en parallèle. Il bascule simplement l'exécution entre la logique métier principale et le générateur, ce qui économise uniquement de l'espace mais pas du temps.

Analyse de tableaux (générateurs) qui génèrent dynamiquement du contenu en PHP

Imaginez le scénario d'utilisation :

1. fichier, Lire ligne par ligne dans le générateur

2.? ? ?


Exemple :

  gen.php
  1 <?php   2 function gen()
  3 {
  4     echo &#39;生成器开始执行&#39; . PHP_EOL;
  5     for ($i = 0; $i < 5; $i++) {
  6         echo &#39;产生数据之前:&#39; . $i  . PHP_EOL;
  7         yield $i; 
  8         echo &#39;产生数据之后:&#39; . $i  . PHP_EOL;
  9     }   
 10     echo &#39;再来一个数据&#39; . PHP_EOL;
 11     yield 5;
 12     echo &#39;生成器执行结束&#39; . PHP_EOL;
 13 }   
 14 $gen_func = gen();
 15 echo &#39;生成器开始执行了吗?&#39; . PHP_EOL;
 16 foreach ($gen_func as $key  => $val) {
 17     echo '使用数据前' . PHP_EOL;
 18     echo '使用数据:' . $val . PHP_EOL;
 19     echo '使用数据后' . PHP_EOL;
 20     //if ($key >= 4) {
 21         //break;
 22     //} 
 23 }
Résultat de l'exécution :

php gen.php

Le générateur démarre l'exécution ?

Le générateur commence à s'exécuter
Avant de générer des données :0
Avant d'utiliser des données
Utilisation de données :0
Après avoir utilisé des données
Après avoir généré des données :0
Avant de générer des données :1
Avant d'utiliser les données
Utiliser les données :1
Après avoir utilisé les données
Après avoir généré les données :1
Avant de générer les données :2
Avant d'utiliser les données
Utiliser les données :2
Après avoir utilisé les données
Après avoir généré les données : 2
Avant de générer les données : 3
Avant d'utiliser les données
Utiliser les données : 3
Après avoir utilisé les données
Après avoir généré les données : 3
Avant de générer des données : 4
Avant d'utiliser des données
Utiliser des données : 4
Après avoir utilisé des données
Après avoir généré des données : 4
Une autre donnée
Avant d'utiliser des données
Utiliser des données : 5
Après avoir utilisé les données
L'exécution du générateur se termine

Interprétation d'une partie du processus d'exécution :

1 La ligne 14 n'appelle pas le générateur gen. (). Juste défini ;

2. Après être entré dans la boucle foreach, commencez à appeler gen();

3 Lorsque $val a besoin d'une valeur, mémorisez la position actuelle a et exécutez le générateur
4. Exécutez jusqu'à l'endroit où le rendement est défini, la valeur est obtenue, mémorisez la position actuelle b et revenez à la position a
5. Bouclez les étapes 3 et 4
6. de rendement La partie restante ;
7. Supprimez les commentaires sur les lignes 20, 21 et 22 et exécutez "Utiliser les données : 4 Après avoir utilisé les données", il n'y aura pas d'autre sortie.

Autres (uniquement la version PHP7.1.14 vérifiée)

1 $data = (yield $value);//OUI $data = rendement $value;/ /. NON

2. Vous pouvez utiliser le rendement $key => $val;

3 Après PHP7, le rendement de peut appeler des générateurs, des tableaux, utiliser return, etc.
(Portail : disponible dans le manuel PHP)

Articles connexes recommandés :

Nouvelles fonctionnalités des générateurs en PHP7 : délégation du générateur (rendement-from) et valeur de retour (retour- valeur)

Analyse simple des générateurs 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