परिचय
Iterator इंटरफेस एब्स्ट्रैक्ट Traversable इंटरफेस को एक्सटेंड करता है। PHP कई बिल्ट-इन इटरेटर (जिन्हें SPL इटरेटर कहा जाता है) प्रदान करता है कई नियमित कार्यक्षमताओं के लिए। उदाहरण हैं ArrayIterator, DirectoryIterator आदि। Iterator इंटरफेस इम्प्लीमेंट करने वाली यूजर क्लास को इसमें परिभाषित एब्स्ट्रैक्ट मेथड इम्प्लीमेंट करने चाहिए।
सिंटैक्स
Iterator extends Traversable {
/* Methods */
abstract public current ( void ) : mixed
abstract public key ( void ) : scalar
abstract public next ( void ) : void
abstract public rewind ( void ) : void
abstract public valid ( void ) : bool
}
मेथड्स
- Iterator::current - वर्तमान एलिमेंट लौटाता है
- Iterator::key - वर्तमान एलिमेंट की कुंजी लौटाता है
- Iterator::next - अगले एलिमेंट पर आगे बढ़ता है
- Iterator::rewind - इटरेटर को पहले एलिमेंट पर रिवाइंड करता है
- Iterator::valid - जांचता है कि वर्तमान स्थिति वैध है या नहीं
जब IteratorAggregate या Iterator इंटरफेस इम्प्लीमेंट किए जाते हैं जो Traversable को एक्सटेंड करते हैं, तो उन्हें implements क्लॉज में इसके नाम से पहले सूचीबद्ध किया जाना चाहिए।
Iterator उदाहरण
निम्न PHP स्क्रिप्ट में, एक क्लास जो Iterator इंटरफेस इम्प्लीमेंट करती है, एक सरणी को प्राइवेट वेरिएबल के रूप में समाहित करती है। Iterator के एब्स्ट्रैक्ट मेथड इम्प्लीमेंट करके, हम foreach लूप का उपयोग करके सरणी को ट्रैवर्स कर सकते हैं साथ ही next() मेथड के साथ।
उदाहरण
<?php
class myIterator implements Iterator {
private $index = 0;
private $arr = array(10, 20, 30, 40);
public function __construct() {
$this->index = 0;
}
public function rewind() {
$this->index = 0;
}
public function current() {
return $this->arr[$this->index];
}
public function key() {
return $this->index;
}
public function next() {
++$this->index;
}
public function valid() {
return isset($this->arr[$this->index]);
}
}
?>
foreach लूप का उपयोग करके, हम MyIterator ऑब्जेक्ट की सरणी प्रॉपर्टी पर पुनरावृत्त कर सकते हैं:
$it = new myIterator();
foreach ($it as $key => $value) {
echo "$key=>" . $value . "\n";
}
पुनरावृत्ति next() मेथड को व्हाइल लूप में कॉल करके भी की जा सकती है। लूप शुरू करने से पहले इटरेटर को rewind करना सुनिश्चित करें:
उदाहरण
$it->rewind();
do {
echo $it->key() . "=>" . $it->current() . "\n";
$it->next();
} while ($it->valid());
आउटपुट
0=>10 1=>20 2=>30 3=>40
दोनों अवसरों पर, सरणी प्रॉपर्टी की ट्रैवर्सल निम्न परिणाम दिखाती है:
0=>10 1=>20 2=>30 3=>40