परिचय
लूपिंग कंस्ट्रक्शन जैसे foreach . का उपयोग करके डेटा के एक बड़े संग्रह को ट्रैवर्स करना बड़ी मेमोरी और काफी प्रोसेसिंग समय की आवश्यकता होगी। जनरेटर . के साथ इन ओवरहेड्स के बिना डेटा के एक सेट पर पुनरावृति करना संभव है। एक जनरेटर फ़ंक्शन एक सामान्य फ़ंक्शन के समान होता है। हालांकि, किसी फ़ंक्शन में रिटर्न स्टेटमेंट के बजाय, जनरेटर यील्ड . का उपयोग करता है कीवर्ड को बार-बार निष्पादित किया जाना है ताकि यह पुनरावृत्त होने के लिए मान प्रदान करे।
उपज कीवर्ड जनरेटर तंत्र का दिल है। भले ही इसका उपयोग वापसी के समान प्रतीत होता है, यह फ़ंक्शन के निष्पादन को नहीं रोकता है। यह पुनरावृत्ति के लिए अगला मान प्रदान करता है और फ़ंक्शन के निष्पादन को रोकता है।
मान देने वाले
लूप के लिए एक जेनरेटर फ़ंक्शन के अंदर लूपिंग वैरिएबल के प्रत्येक मान का उपयोग किया जाता है
उदाहरण
<?php
function squaregenerator(){
for ($i=1; $i<=5; $i++){
yield $i*$i;
}
}
$gen=squaregenerator();
foreach ($gen as $val){
echo $val . " ";
}
?> जैसा कि foreach स्टेटमेंट पहली बार $val प्रदर्शित करने का प्रयास करता है, स्क्वेयरजेनरेटर पहले तत्व का उत्पादन करता है, $i को बरकरार रखता है और निष्पादन को तब तक रोक देता है जब तक कि foreach अगला पुनरावृत्ति न कर ले। आउटपुट एक नियमित फ़ोरैच लूप के समान है
आउटपुट
1 4 9 16 25
PHP की श्रेणी () फ़ंक्शन प्रत्येक संख्या के बीच $step के अंतराल के साथ $start से $stop तक पूर्णांकों की एक सूची देता है। निम्नलिखित प्रोग्राम जनरेटर के रूप में रेंज () को लागू करता है
उदाहरण
<?php
function rangegenerator($start, $stop, $step){
for ($i=$start; $i<=$stop; $i+=$step){
yield $i;
}
}
foreach (rangegenerator(2,10,2) as $val){
echo $val . " ";
}
?> आउटपुट
आउटपुट श्रेणी(2,20,2) . के समान है
2 4 6 8 10
एक सहयोगी सरणी को जनरेटर के रूप में भी लागू किया जा सकता है
उदाहरण
<?php
function arrgenerator($arr){
foreach ($arr as $key=>$val){
yield $key=>$val;
}
}
$arr=array("one"=>1, "two"=>2, "three"=>3, "four"=>4);
$gen=arrgenerator($arr);
foreach ($gen as $key=>$val)
echo $key . "=>" . $val . "\n";
?> आउटपुट
one=>1 two=>2 three=>3 four=>4