Maison  >  Article  >  développement back-end  >  Modèles de conception avancés orientés objet PHP : exemples d'utilisation de modèles d'itérateur

Modèles de conception avancés orientés objet PHP : exemples d'utilisation de modèles d'itérateur

巴扎黑
巴扎黑original
2017-05-23 13:45:421470parcourir

Quel est le modèle d'itérateur ?

Le modèle de conception Iterator permet de construire des objets qui fournissent une interface standard unique pour effectuer une boucle ou une itération sur tout type de données dénombrables.

Problèmes de modèle d'itérateur et solutions :

Le modèle de conception Iterator aide les objets de style à gérer des collections de données ou d'autres objets. Lors de la création d'une classe basée sur le modèle de conception Iterator, nous créons également un ensemble d'interfaces pour fournir une manière unifiée de gérer ces collections.

Parfois, un ensemble de données semble très simple. Les programmeurs ne peuvent pas anticiper les changements, ils choisissent donc de ne pas modifier leur code et de ne pas créer d'itérateurs. Cette situation se produit souvent lors de l'appel de la base de données. À ce stade, le programmeur crée une requête MySQL, puis exécute une simple commande de récupération de tableau. Toutefois, conserver une telle approche procédurale dans le code n’est pas la meilleure solution.

Les objets itérateurs doivent être créés lors du traitement des ensembles de résultats MySQL. Une approche plus simple consiste à fournir une requête MySQL au constructeur de classe, puis à parcourir le jeu de résultats en appelant les méthodes publiques de l'objet itérateur. Des exemples d'itérateurs plus complexes peuvent également avoir des paramètres supplémentaires à envoyer à l'itérateur, et en fonction de ces conditions, il est possible d'exécuter différents ensembles de requêtes MySQL. Quoi qu’il en soit, le flux de code externe gère simplement la même méthode publique ennuyeuse pour obtenir l’élément suivant de la collection.

Lorsqu'il s'agit de données dénombrables qui doivent être parcourues, la meilleure solution est de créer un objet basé sur le modèle d'itérateur.

UML

Ce diagramme détaille une conception de classe utilisant le modèle de conception Iterator.

Modèles de conception avancés orientés objet PHP : exemples dutilisation de modèles ditérateur

Ce qui suit est une explication de l'image ci-dessus :

1.MyObject est un objet de base qui peut être collecté dans une collection dénombrable. MyObject a une chaîne privée nommée name, qui est utilisée pour représenter le caractère unique d'un objet spécifique. La méthode publique getName() fournit une interface pour récupérer le nom de l'objet via le nom privé.

2.MyObjectCollection représente une classe qui gère une collection d'objets MyObject. Le tableau MyObjects contient une collection de ces objets. La logique fournie par getMyObjects() est utilisée pour créer des collections et stocker des objets dans le tableau MyObjects.

3.MyObjectCollectionIterator fournit une interface pour itérer les objets stockés dans MyObjectCollection. Cette classe a deux méthodes publiques. Parmi elles, la méthode hasNext() permet au programme appelant de savoir s'il existe d'autres éléments dans la collection MyObjectCollection de MyObjects : la méthode getNext() renverra le prochain objet MyObject dans le tableau de MyObjectCollection.

Exemple d'utilisation

Cet exemple montre la séquence d'appel des méthodes itératrices lors de l'utilisation de foreach.

<?php
class myIterator implements Iterator {
    private $position = 0;
    private $array = array(
        "firstelement",
        "secondelement",
        "lastelement",
    );  
    public function __construct() {
        $this->position = 0;
    }
    function rewind() {
        var_dump(__METHOD__);
        $this->position = 0;
    }
    function current() {
        var_dump(__METHOD__);
        return $this->array[$this->position];
    }
    function key() {
        var_dump(__METHOD__);
        return $this->position;
    }
    function next() {
        var_dump(__METHOD__);
        ++$this->position;
    }
    function valid() {
        var_dump(__METHOD__);
        return isset($this->array[$this->position]);
    }
}
$it = new myIterator;
foreach($it as $key => $value) {
    var_dump($key, $value);
    echo "\n";
}
?>

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