জেনারেটর কনসেপ্ট PHP 7-এ নতুন নয়, কারণ এটি পুরানো সংস্করণে থেকেও উপলব্ধ ছিল। জেনারেটর সহ, ইমপ্লিমেন্টেশন ইটারেটর ইন্টারফেস ইমপ্লিমেন্ট করা একটি ক্লাসের ওভারহেড ছাড়া সহজ হয়। জেনারেটর সাহায্যে, আমরা মেমরিতে অ্যারে ছাড়া foreach কোড লিখতে পারি। এটি “exceed memory limit errors” দূর করতে সাহায্য করে।
PHP 7-এ generator delegation সাহায্যে, আমরা অন্য একটি জেনারেটরে স্বয়ংক্রিয়ভাবে ডেলিগেট করতে পারি। এটি অ্যারে এবং ট্র্যাভার্সেবল ইন্টারফেস ইমপ্লিমেন্ট করা অবজেক্টও অনুমতি দেয়।
Generator delegation উদাহরণ ১
<html> <head> <title> PHP 7 : Tutorialpoint </title> </head> <body> <?php function generator(){ yield "zero"; yield "one"; yield "two"; } function generator1(){ yield "three"; yield "four"; yield "five"; } function generator2(){ yield "six"; yield "seven"; yield "eight"; yield from generator(); yield "nine"; yield from generator1(); yield "ten"; } foreach (generator() as $value){ echo $value, PHP_EOL; } foreach(generator2() as $value){ echo $value, PHP_EOL; } ?> </body> </html>আউটপুট
উপরোক্ত PHP প্রোগ্রাম generator delegation প্রোগ্রামের আউটপুট হবে −
zero one two six seven eight zero one two nine three four five ten
ব্যাখ্যা
- আমরা উপরের কোডটি একটি এডিটরে লিখতে পারি এবং উপরের উদাহরণে দেওয়া HTML কোড লিখতে পারি এবং HTML-এর বডি পარტে জেনারেটর রিটার্ন এক্সপ্রেশনের জন্য আসল PHP 7 কোড ইনজেক্ট করা হয়।
- দ্বিতীয়, তিনটি ফাংশন ডিক্লেয়ার করা হয়েছে “generator”, “generator1”, এবং “generator2” ব্যবহার করে।
- generator ফাংশনে yield “zero”, “one”, এবং “two” ডিফাইন করা হয়েছে।
- “generator1” ফাংশনে, yield “three”, “four”, এবং “five” ডিফাইন করা হয়েছে।
- ‘generator2’ ফাংশনে, আমরা yield”six”, “seven”, এবং “eight” ডিফাইন করেছি generator এবং generator 1 generator2-এ পড়তে।
- শেষে, আমরা “generator” এবং “generator2” ফাংশনে ইটারেট করছি শেষ পর্যন্ত (PHP_EOL) এবং yield-এর মানগুলো ইকো করছি।