পরিচয়
লুপিং কনস্ট্রাক্ট যেমন foreach ব্যবহার করে ডেটার একটি বড় সংগ্রহ অতিক্রম করা বড় মেমরি এবং যথেষ্ট প্রক্রিয়াকরণ সময় প্রয়োজন হবে। জেনারেটর সহ এই ওভারহেডগুলি ছাড়াই ডেটার একটি সেটের উপর পুনরাবৃত্তি করা সম্ভব। একটি জেনারেটর ফাংশন একটি সাধারণ ফাংশন অনুরূপ. যাইহোক, একটি ফাংশনে রিটার্ন স্টেটমেন্টের পরিবর্তে, জেনারেটর ইল্ড ব্যবহার করে কীওয়ার্ড বারবার কার্যকর করতে হবে যাতে এটি পুনরাবৃত্তি করার মান প্রদান করে।
ফলন কীওয়ার্ড হল জেনারেটর মেকানিজমের কেন্দ্রবিন্দু। যদিও এটির ব্যবহার রিটার্নের অনুরূপ বলে মনে হচ্ছে, এটি ফাংশন সম্পাদন বন্ধ করে না। এটি পুনরাবৃত্তির জন্য পরবর্তী মান প্রদান করে এবং ফাংশন সম্পাদনে বিরতি দেয়।
উৎপাদনশীল মান
লুপ এর জন্য A একটি জেনারেটর ফাংশনের ভিতরে লুপিং ভেরিয়েবলের প্রতিটি মান ব্যবহার করা হয়
উদাহরণ
<?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 এর রেঞ্জ() ফাংশন $start থেকে $stop পর্যন্ত প্রতিটি সংখ্যার মধ্যে $step এর ব্যবধান সহ পূর্ণসংখ্যার একটি তালিকা প্রদান করে। নিম্নলিখিত প্রোগ্রাম রেঞ্জ() কে জেনারেটর হিসাবে প্রয়োগ করে
উদাহরণ
<?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