परिचय
जब जनरेटर फ़ंक्शन को आंतरिक रूप से कहा जाता है, तो जेनरेटर वर्ग का एक नया ऑब्जेक्ट वापस कर दिया जाता है। यह इटरेटर . को लागू करता है इंटरफेस। इटरेटर इंटरफ़ेस निम्नलिखित अमूर्त विधियों को परिभाषित करता है
- इटरेटर::वर्तमान — वर्तमान तत्व लौटाएं
- इटरेटर::कुंजी — वर्तमान तत्व की कुंजी लौटाएं
- इटरेटर::अगला — अगले तत्व पर आगे बढ़ें
- Iterator::rewind - इटरेटर को पहले तत्व पर रिवाइंड करें
- Iterator::valid — जांचता है कि वर्तमान स्थिति वैध है या नहीं
जेनरेटर केवल-अग्रेषित पुनरावर्तक . के रूप में कार्य करता है ऑब्जेक्ट होगा, और ऐसे तरीके प्रदान करता है जिन्हें जनरेटर की स्थिति में हेरफेर करने के लिए बुलाया जा सकता है, जिसमें मान भेजना और उसमें से मान वापस करना शामिल है।
इंटररेटर के रूप में जेनरेटर
निम्नलिखित उदाहरण में, जेनरेटर फ़ंक्शन जेनरेटर ऑब्जेक्ट में एक फ़ाइल में लाइनें उत्पन्न करता है जिसे ओरीच लूप का उपयोग करके ट्रेस किया जा सकता है। वर्तमान . जैसी पुनरावर्तक विधियां () और अगला () का भी आह्वान किया जा सकता है। हालांकि, चूंकि जनरेटर केवल फॉरवर्ड-ओनली इटरेटर है, इसलिए रिवाइंड calling को कॉल करना () विधि अपवाद फेंकता है
उदाहरण
<?php function filegenerator($name) { $fileHandle = fopen($name, 'r'); while ($line = fgets($fileHandle)) { yield $line; } fclose($fileHandle); } $name="test.txt"; $file=filegenerator($name); foreach ($file as $line) echo $line; $file->rewind(); echo $file->current(); $file->next(); echo $file->current(); ?>
आउटपुट
फ़ाइल लाइनों के ट्रैवर्सल के बाद, नीचे दिखाए गए अनुसार घातक त्रुटि प्रदर्शित होती है
PHP User Defined Functions PHP Function Arguments PHP Variable Functions PHP Internal (Built-in) Functions PHP Anonymous functions PHP Arrow Functions PHP Fatal error: Uncaught Exception: Cannot rewind a generator that was already run