Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> PHP

PHP Generator क्लास

परिचय

foreach जैसे लूपिंग कंस्ट्रक्ट का उपयोग करके डेटा के बड़े संग्रह को ट्रैवर्स करने के लिए बड़ी मेमोरी और काफी प्रोसेसिंग समय की आवश्यकता होगी। जेनरेटर के साथ, इन ओवरहेड्स के बिना डेटा के सेट पर पुनरावृत्त करना संभव है। एक जेनरेटर फ़ंक्शन सामान्य फ़ंक्शन के समान होता है। हालांकि, फ़ंक्शन में return स्टेटमेंट के बजाय, जेनरेटर yield कीवर्ड का उपयोग करता है जिसे बार-बार निष्पादित किया जाता है ताकि यह पुनरावृत्ति के लिए मान प्रदान करे।

yield कीवर्ड जेनरेटर मैकेनिज्म का दिल है। भले ही इसका उपयोग return के समान प्रतीत होता है, यह फ़ंक्शन का निष्पादन नहीं रोकता। यह पुनरावृत्ति के लिए अगला मान प्रदान करता है और फ़ंक्शन के निष्पादन को रोक देता है।

सिंटैक्स

Generator implements Iterator {
    /* Methods */
    public current ( void ) : mixed
    public getReturn ( void ) : mixed
    public key ( void ) : mixed
    public next ( void ) : void
    public rewind ( void ) : void
    public send ( mixed $value ) : mixed
    public throw ( Throwable $exception ) : mixed
    public valid ( void ) : bool
    public __wakeup ( void ) : void
}

मेथड्स

  • public Generator::current() - यील्डेड मान प्राप्त करता है
  • public Generator::getReturn() - जेनरेटर का रिटर्न मान प्राप्त करता है
  • public Generator::key() - यील्डेड मान की कुंजी प्राप्त करता है
  • public Generator::next() - जेनरेटर का निष्पादन जारी रखता है। Generator::send() को NULL आर्गुमेंट के साथ कॉल करने के समान प्रभाव।
  • public Generator::rewind() - इटरेटर को रिवाइंड करता है। यदि पुनरावृत्ति पहले ही शुरू हो चुकी है, तो यह एक्सेप्शन फेंकेगा।
  • public Generator::send() - दिए गए मान को वर्तमान yield एक्सप्रेशन के परिणाम के रूप में जेनरेटर को भेजता है और जेनरेटर को जारी रखता है।
  • public Generator::throw() - जेनरेटर में एक्सेप्शन फेंकता है और जेनरेटर के निष्पादन को जारी रखता है।
  • public Generator::valid() - जांचता है कि इटरेटर बंद हुआ है या नहीं
  • public Generator::__wakeup() - एक्सेप्शन फेंकता है क्योंकि जेनरेटर सीरियलाइज़ नहीं किए जा सकते।

Generator क्लास Iterator इंटरफेस इम्प्लीमेंट करती है। Generator ऑब्जेक्ट new के माध्यम से इंस्टेंटिएट नहीं किए जा सकते। yield कीवर्ड वाली कोई भी यूजर-डिफाइंड फ़ंक्शन Generator क्लास का ऑब्जेक्ट बनाती है।

Generator उदाहरण

चूंकि जेनरेटर Iterator इंटरफेस इम्प्लीमेंट करता है, foreach लूप का उपयोग यील्डेड मानों को ट्रैवर्स करने के लिए किया जा सकता है।

<?php
function squaregenerator() {
    for ($i = 1; $i <= 5; $i++) {
        yield $i * $i;
    }
}
$gen = squaregenerator();
foreach ($gen as $val) {
    echo $val . " ";
}
?>

आउटपुट

1 4 9 16 25

निम्न उदाहरण जेनरेटर क्लास के current() और next() मेथड का उपयोग करके यील्डेड मानों को ट्रैवर्स करता है। लूप कंडीशन valid() मेथड से जांची जाती है।

उदाहरण

<?php
function squaregenerator() {
    for ($i = 1; $i <= 5; $i++) {
        yield $i * $i;
    }
}
$gen = squaregenerator();
while ($gen->valid()) {
    echo "key: " . $gen->key() . " value: " . $gen->current() . "\n";
    $gen->next();
}
?>

आउटपुट

key: 0 value: 1
key: 1 value: 4
key: 2 value: 9
key: 3 value: 16
key: 4 value: 25

मुख्य लाभ: मेमोरी कुशल - सभी मान एक साथ मेमोरी में नहीं रखे जाते; आलसी मूल्यांकन।

  1. - PHP में एब्स्ट्रैक्ट क्लास समझाया गया

    PHP5 अपने साथ ऑब्जेक्ट-ओरिएंटेड मॉडल लाता है, ऑब्जेक्ट-ओरिएंटेड मॉडल की कुछ अवधारणाएं हैं: क्लास, ऑब्जेक्ट, एनकैप्सुलेशन, पॉलीमॉर्फिज्म, एब्स्ट्रैक्ट और फाइनल क्लासेज, और मेथड्स, इंटरफेसेस और इनहेरिटेंस, आदि... इस लेख में, हम एब्स्ट्रैक्ट क्लास और PHP में ऑब्जेक्ट-ओरिएंटेड तकनीकों से संबंधित इसकी व

  1. - PHP में get_class_methods() फंक्शन

    PHP में get_class_methods() फंक्शन क्लास मेथड्स के नाम प्राप्त करता है। यह name_of_class द्वारा निर्दिष्ट क्लास के लिए परिभाषित मेथड नामों की सरणी लौटाता है। त्रुटि की स्थिति में NULL लौटाता है। सिंटैक्स get_class_methods(class) पैरामीटर्स name_of_class - क्लास नाम। आवश्यक! रिटर्न वैल्यू name_o

  1. - PHP में class_exists() फंक्शन

    PHP में class_exists() फंक्शन जांचता है कि क्लास परिभाषित की गई है या नहीं। यदि क्लास एक परिभाषित क्लास है तो TRUE लौटाता है, अन्यथा FALSE। सिंटैक्स class_exists(class, autoload) पैरामीटर्स class - क्लास का नाम। autoload - डिफ़ॉल्ट रूप से __autoload को कॉल करना है या नहीं। रिटर्न वैल्यू यदि क्ल