Iteratormuster und seine PHP-Implementierung (Yii-Framework)

伊谢尔伦
Freigeben: 2023-03-02 18:52:01
Original
1221 Leute haben es durchsucht

Iteratormuster ist ein Verhaltensmuster, das das einfachste und häufigste Entwurfsmuster ist. Es ermöglicht Benutzern, jedes Element im Container über eine bestimmte Schnittstelle zu überprüfen, ohne den eigentlichen zugrunde liegenden Vorgang zu kennen.

Anwendbarkeit

Wenn Sie die Traversal-Funktion der Sprache selbst verwenden möchten, um benutzerdefinierte Strukturen zu ermöglichen, wie z. B. die foreach-Funktion in PHP

Klassendiagramm

Iteratormuster und seine PHP-Implementierung (Yii-Framework)

PHP-Instanz

<?php
class sample implements Iterator {
   private $_items ;

   public function __construct(&$data) {
       $this->_items = $data;
   }
   public function current() {
       return current($this->_items);
   }

   public function next() {
       next($this->_items);   
   }

   public function key() {
       return key($this->_items);
   }

   public function rewind() {
       reset($this->_items);
   }

   public function valid() {                                                                              
       return ($this->current() !== FALSE);
   }
}

// client
$data = array(1, 2, 3, 4, 5);
$sa = new sample($data);
foreach ($sa AS $key => $row) {
   echo $key, &#39; &#39;, $row, &#39;<br />&#39;;
}
?>
Nach dem Login kopieren

Implementierung im Yii-Framework:

Im Yii-Framework können wir die Implementierung seines Iterators im Sammlungsverzeichnis In sehen In der Datei CMapIterator.php lautet die Implementierung wie folgt:

class CMapIterator implements Iterator {
/**
* @var array the data to be iterated through
*/
    private $_d;
/**
* @var array list of keys in the map
*/
    private $_keys;
/**
* @var mixed current key
*/
    private $_key;
 
/**
* Constructor.
* @param array the data to be iterated through
*/
    public function __construct(&$data) {
        $this->_d=&$data;
        $this->_keys=array_keys($data);
    }
 
/**
* Rewinds internal array pointer.
* This method is required by the interface Iterator.
*/
    public function rewind() {                                                                                 
        $this->_key=reset($this->_keys);
    }
 
/**
* Returns the key of the current array element.
* This method is required by the interface Iterator.
* @return mixed the key of the current array element
*/
    public function key() {
        return $this->_key;
    }
 
/**
* Returns the current array element.
* This method is required by the interface Iterator.
* @return mixed the current array element
*/
    public function current() {
        return $this->_d[$this->_key];
    }
 
/**
* Moves the internal pointer to the next array element.
* This method is required by the interface Iterator.
*/
    public function next() {
        $this->_key=next($this->_keys);
    }
 
/**
* Returns whether there is an element at current position.
* This method is required by the interface Iterator.
* @return boolean
*/
    public function valid() {
        return $this->_key!==false;
    }
}
 
$data = array(&#39;s1&#39; => 11, &#39;s2&#39; => 22, &#39;s3&#39; => 33);
$it = new CMapIterator($data);
foreach ($it as $row) {
    echo $row, &#39;<br />&#39;;
}
Nach dem Login kopieren

Im Vergleich zur vorherigen einfachen Implementierung wird die Änderung seiner Position durch die Steuerung des Schlüssels erreicht. Der Zweck dieser Implementierung besteht darin, falsche It kann nicht als Array-Wert iteriert werden.


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!