Maison développement back-end tutoriel php Analyse des itérateurs et générateurs en PHP et introduction à leurs avantages et inconvénients

Analyse des itérateurs et générateurs en PHP et introduction à leurs avantages et inconvénients

Aug 11, 2018 pm 04:57 PM
php 迭代器

Ce que cet article vous apporte, c'est l'analyse et l'introduction des avantages et des inconvénients des itérateurs et des générateurs en PHP. J'espère qu'il aura une certaine valeur de référence. t'aider.

1. Itérateur

Analyse : Pensez-y, si vous mettez l'objet de collection et les opérations sur le Objet de collection Ensemble, lorsque nous voulons parcourir les éléments de l'objet de collection d'une autre manière, nous devons modifier l'objet de collection, ce qui viole le « principe de responsabilité unique », et le modèle d'itérateur sépare la structure des données et l'algorithme des données. structure, et les deux peuvent être développés indépendamment.

Avantages :

1. Prend en charge plusieurs méthodes de traversée. Par exemple, dans une liste ordonnée, nous fournissons deux itérateurs pour le parcours direct et le parcours inverse selon les besoins. Les utilisateurs n'ont besoin que de demander à notre itérateur d'effectuer des opérations de parcours sur la collection

2. Classes d'agrégation simplifiées. En raison de l'introduction des itérateurs, l'objet de collection d'origine n'a pas besoin de parcourir les éléments de collection par lui-même

3. Il est très pratique d'ajouter de nouvelles classes d'agrégation et classes d'itérateur, et les deux dimensions peuvent être modifiées indépendamment.

4. Fournir une interface unifiée pour différentes structures de collection, prenant ainsi en charge le même algorithme pour fonctionner sur différentes structures de collection

Inconvénients :

1. Itération Le modèle d'itérateur sépare les responsabilités de stockage des données et de parcours des données. Lors de l'ajout d'un nouvel objet de collection, vous devez ajouter une classe d'itérateur correspondante. Le nombre de classes augmente par paires, ce qui augmente la complexité du système dans une certaine mesure

.

Interface spécifique :

Iterator extends Traversable {
/* 方法 */
abstract public mixed current ( void )
abstract public scalar key ( void )
abstract public void next ( void )
abstract public void rewind ( void )
abstract public bool valid ( void )
}
Copier après la connexion

2. Générateur

Le générateur PHP (générateur) est une fonction introduite dans PHP5.5.0 différente des itérateurs PHP standards, Les classes du générateur PHP ne sont pas nécessaires pour implémenter l'interface Iterator, réduisant ainsi la charge sur la classe. Le générateur calculera et affichera les valeurs à itérer en fonction des exigences, ce qui a un impact significatif sur les performances. Imaginez s'il s'agissait d'itérateurs PHP standard. effectuer souvent des opérations d'itération en mémoire Si l'opérateur doit calculer l'ensemble de données à l'avance, les performances seront faibles ; si une méthode spécifique est utilisée pour calculer une grande quantité de données, l'impact sur les performances sera encore plus important ; À ce stade, nous pouvons utiliser le générateur pour calculer et générer instantanément les valeurs suivantes sans occuper de précieuses ressources mémoire.

Avantages : prend moins de mémoire et a de bonnes performances. L'état interne du générateur est mis en pause chaque fois qu'il produit une valeur ; il est restauré lorsque le générateur demande la valeur suivante. Les composants internes du générateur continuent de basculer entre pause et reprise jusqu'à ce que la boucle soit terminée ou jusqu'à la position pause

Inconvénients :

1 Le générateur PHP ne peut pas satisfaire les besoins de tous les itérateurs, car s'il le fait. n'est pas interrogé, le générateur ne sait jamais quelle est la prochaine valeur sur laquelle itérer, il n'y a aucun moyen de reculer ou d'avancer dans le générateur.

2. Le générateur est toujours unique et le même générateur ne peut pas être itéré plusieurs fois. Cependant, le générateur peut être reconstruit ou cloné si nécessaire.

Créer un générateur :

1 Le générateur étant une fonction PHP, le générateur utilise le mot-clé rendement dans la fonction. Contrairement aux fonctions PHP ordinaires, les producteurs ne renvoient jamais de valeurs, ils produisent uniquement des valeurs.

<?php
function myGenerator(){
    yield &#39;a&#39;;
    yield &#39;b&#39;;
    yield &#39;c&#39;;
}
Copier après la connexion

2. Lors de l'appel de la fonction générateur, PHP renverra un objet appartenant à la classe Generator. Cet objet peut être itéré à l'aide de la fonction foreach(). Pour chaque itération, PHP demandera à l'instance Generator de calculer et de fournir la prochaine valeur à itérer

<?php
function makeRange($length){
    for($i = 0; $i<$length; $i++){
        yield $i;
    }
}

foreach(makeRange(1000000) as $i){
    echo $i,PHP_EOL;
}
Copier après la connexion

Comme indiqué ci-dessus : Lorsque $length est grand (millions) et que vous n'utilisez pas de générateur à la fois en même temps Si tel est le cas, la mémoire doit être allouée à l'avance pour un tableau composé de un million à mille cinq entiers. Le générateur PHP peut réaliser la même opération, mais il n'allouera de la mémoire que pour un entier à la fois

Recommandations associées :

php utilise des opérations sur bits pour implémenter l'addition, la soustraction, la multiplication et division d'entiers et test (exemple de code)

Code pour une interaction simple entre PHP et formulaire html

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Configuration du projet CakePHP Configuration du projet CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Routage CakePHP Routage CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

CakePHP travaillant avec la base de données CakePHP travaillant avec la base de données Sep 10, 2024 pm 05:25 PM

Travailler avec la base de données dans CakePHP est très simple. Nous comprendrons les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) dans ce chapitre.

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

See all articles