परिचय
PHP 5 से, किसी ऑब्जेक्ट के सभी विज़िबल आइटम्स के माध्यम से इटरेट करना संभव है। इटरेशन foreach लूप के साथ-साथ Iterator इंटरफेस का उपयोग करके किया जा सकता है। PHP में IteratorAggregate इंटरफेस भी है जिसका उपयोग इस उद्देश्य के लिए किया जा सकता है।
1. foreach लूप का उपयोग
डिफ़ॉल्ट रूप से, foreach लूप केवल public प्रॉपर्टीज़ पर इटरेट करता है। यदि क्लास के अंदर से इटरेट किया जाए (जैसे मेथड के भीतर), तो private और protected प्रॉपर्टीज़ भी विज़िबल होती हैं।
उदाहरण
<?php
class myclass {
private $var;
protected $var1;
public $x, $y, $z;
public function __construct() {
$this->var = "private variable";
$this->var1 = TRUE;
$this->x = 100;
$this->y = 200;
$this->z = 300;
}
public function iterate() {
foreach ($this as $key => $value) {
print "$key => $value\n";
}
}
}
$obj = new myclass();
foreach($obj as $key => $value) {
print "$key => $value\n";
}
echo "\n";
$obj->iterate();
?>
आउटपुट
x => 100 y => 200 z => 300 var => private variable var1 => 1 x => 100 y => 200 z => 300
व्याख्या: बाहरी foreach केवल public प्रॉपर्टीज़ (x, y, z) दिखाता है। आंतरिक iterate() मेथड private और protected प्रॉपर्टीज़ भी दिखाता है क्योंकि यह क्लास के अंदर से एक्सेस कर रहा है।
2. Iterator इंटरफेस का उपयोग
Iterator इंटरफेस निम्नलिखित एब्स्ट्रैक्ट मेथड्स को परिभाषित करता है जिन्हें इम्प्लीमेंट करना होता है:
abstract public current(): mixed abstract public key(): scalar abstract public next(): void abstract public rewind(): void abstract public valid(): bool
- current() - वर्तमान एलिमेंट लौटाता है
- key() - वर्तमान एलिमेंट की कुंजी लौटाता है
- next() - अगले एलिमेंट पर जाता है
- rewind() - इटरेटर को पहले एलिमेंट पर रीवाइंड करता है
- valid() - चेक करता है कि वर्तमान स्थिति वैध है या नहीं
उदाहरण: Iterator इम्प्लीमेंटेशन
<?php
class myclass implements Iterator {
private $arr = array('a', 'b', 'c');
public function rewind() {
echo "rewinding\n";
reset($this->arr);
}
public function current() {
$var = current($this->arr);
echo "current: $var\n";
return $var;
}
public function key() {
$var = key($this->arr);
echo "key: $var\n";
return $var;
}
public function next() {
$var = next($this->arr);
echo "next: $var\n";
return $var;
}
public function valid() {
$key = key($this->arr);
$var = ($key !== NULL && $key !== FALSE);
echo "valid: $var\n";
return $var;
}
}
$obj = new myclass();
foreach ($obj as $k => $v) {
print "$k: $v\n";
}
?>
आउटपुट
rewinding valid: 1 current: a key: 0 0: a next: b valid: 1 current: b key: 1 1: b next: c valid: 1 current: c key: 2 2: c next: valid:
मुख्य बिंदु
- foreach लूप स्वचालित रूप से rewind(), valid(), current(), key(), next() कॉल करता है।
- Iterator इम्प्लीमेंट करने से कस्टम इटरेशन लॉजिक (जैसे फाइल पढ़ना, डेटाबेस रिजल्ट्स) संभव होता है।
- IteratorAggregate इंटरफेस के साथ getIterator() मेथड इम्प्लीमेंट करके बाहरी इटरेटर उपयोग कर सकते हैं।