Was ist das Iteratormuster?
Das Iterator-Entwurfsmuster hilft bei der Konstruktion von Objekten, die eine einzige Standardschnittstelle für die Schleife oder Iteration über jede Art von zählbaren Daten bereitstellen.
Probleme und Lösungen des Iterator-Musters:
Das Iterator-Entwurfsmuster hilft dabei, Objekte so zu gestalten, dass sie Sammlungen von Daten oder anderen Objekten verarbeiten. Beim Erstellen einer Klasse basierend auf dem Iterator-Entwurfsmuster erstellen wir auch eine Reihe von Schnittstellen, um eine einheitliche Möglichkeit zur Verwaltung dieser Sammlungen bereitzustellen.
Manchmal erscheint ein Datensatz sehr einfach. Programmierer können Änderungen möglicherweise nicht vorhersehen und entscheiden sich daher dafür, ihren Code nicht zu ändern und keine Iteratoren zu erstellen. Diese Situation tritt häufig beim Aufruf der Datenbank auf. Zu diesem Zeitpunkt erstellt der Programmierer eine MySQL-Abfrage und führt dann einen einfachen Array-Abrufbefehl aus. Allerdings ist es nicht die beste Lösung, einen solchen prozeduralen Ansatz im Code beizubehalten.
Iteratorobjekte sollten bei der Verarbeitung von MySQL-Ergebnismengen erstellt werden. Ein einfacherer Ansatz besteht darin, dem Klassenkonstruktor eine MySQL-Abfrage bereitzustellen und dann die Ergebnismenge zu durchlaufen, indem die öffentlichen Methoden des Iteratorobjekts aufgerufen werden. Bei komplexeren Iterator-Beispielen können auch zusätzliche Parameter an den Iterator gesendet werden. Abhängig von diesen Bedingungen ist es möglich, verschiedene Sätze von MySQL-Abfragen auszuführen. Wie auch immer, der äußere Codefluss verarbeitet einfach dieselbe lästige öffentliche Methode, um das nächste Element in der Sammlung abzurufen.
Beim Umgang mit zählbaren Daten, die durchlaufen werden müssen, besteht die beste Lösung darin, ein Objekt basierend auf dem Iteratormuster zu erstellen.
UML
Dieses Diagramm beschreibt detailliert einen Klassenentwurf unter Verwendung des Iterator-Entwurfsmusters.
Das Folgende ist eine Erklärung des obigen Bildes:
1.MyObject ist ein Basisobjekt, das in einer zählbaren Sammlung gesammelt werden kann. MyObject verfügt über eine private Zeichenfolge mit dem Namen name, die zur Darstellung der Einzigartigkeit eines bestimmten Objekts verwendet wird. Die öffentliche Methode getName() bietet eine Schnittstelle zum Abrufen des Objektnamens über den privaten Namen name.
2.MyObjectCollection stellt eine Klasse dar, die eine Sammlung von MyObject-Objekten verwaltet. Das MyObjects-Array enthält eine Sammlung dieser Objekte. Die von getMyObjects() bereitgestellte Logik wird verwendet, um Sammlungen zu erstellen und Objekte im MyObjects-Array zu speichern.
3.MyObjectCollectionIterator bietet eine Schnittstelle zum Iterieren von in MyObjectCollection gespeicherten Objekten. Diese Klasse verfügt über zwei öffentliche Methoden. Unter anderem ermöglicht die Methode hasNext() dem aufrufenden Programm zu erkennen, ob sich in der MyObjectCollection-Auflistung von MyObjects andere Elemente befinden: Die Methode getNext() gibt das nächste MyObject-Objekt im Array in MyObjectCollection zurück.
Verwendungsbeispiel
Dieses Beispiel zeigt die Aufrufsequenz von Iteratormethoden bei Verwendung von 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"; } ?>
Das obige ist der detaillierte Inhalt vonPHP-objektorientierte erweiterte Entwurfsmuster: Beispiele für die Verwendung von Iteratormustern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!