পরিচয়
লুপিং কনস্ট্রাক্ট যেমন foreach ব্যবহার করে ডেটার একটি বড় সংগ্রহ অতিক্রম করা বড় মেমরি এবং যথেষ্ট প্রক্রিয়াকরণ সময় প্রয়োজন হবে। জেনারেটর সহ এই ওভারহেডগুলি ছাড়াই ডেটার একটি সেটের উপর পুনরাবৃত্তি করা সম্ভব। একটি জেনারেটর ফাংশন একটি সাধারণ ফাংশন অনুরূপ. যাইহোক, একটি ফাংশনে রিটার্ন স্টেটমেন্টের পরিবর্তে, জেনারেটর ইল্ড ব্যবহার করে কীওয়ার্ড বারবার কার্যকর করতে হবে যাতে এটি পুনরাবৃত্তি করার মান প্রদান করে।
ফলন কীওয়ার্ড হল জেনারেটর মেকানিজমের কেন্দ্রবিন্দু। যদিও এটির ব্যবহার রিটার্নের অনুরূপ বলে মনে হচ্ছে, এটি ফাংশন সম্পাদন বন্ধ করে না। এটি পুনরাবৃত্তির জন্য পরবর্তী মান প্রদান করে এবং ফাংশন সম্পাদনে বিরতি দেয়।
সিনট্যাক্স
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 }
পদ্ধতি
পাবলিক জেনারেটর::বর্তমান ( অকার্যকর ) - মিশ্রিত — ফলিত মূল্য পান
পাবলিক জেনারেটর::getReturn ( void ) :মিশ্র — একটি জেনারেটরের রিটার্ন মান পান
পাবলিক জেনারেটর::কী ( অকার্যকর ) - মিশ্রিত — ফলিত মানের চাবি পায়।
পাবলিক জেনারেটর::পরবর্তী ( void ) − void — জেনারেটরের সঞ্চালন পুনরায় শুরু করুন। জেনারেটর::send() কে আর্গুমেন্ট হিসাবে NULL সহ কল করার মতো একই প্রভাব৷
পাবলিক জেনারেটর::রিওয়াইন্ড ( void ) − void — পুনরাবৃত্তিকারী রিওয়াইন্ড করুন। যদি পুনরাবৃত্তি ইতিমধ্যেই শুরু হয়ে থাকে, তাহলে এটি একটি ব্যতিক্রম হবে৷
৷পাবলিক জেনারেটর::send ( মিশ্র $value ) :মিশ্র — বর্তমান ফলন প্রকাশের ফলে জেনারেটরে প্রদত্ত মান পাঠায় এবং জেনারেটর পুনরায় শুরু করে।
পাবলিক জেনারেটর::নিক্ষেপ ( নিক্ষেপযোগ্য $ ব্যতিক্রম ) - মিশ্রিত — জেনারেটরে একটি ব্যতিক্রম নিক্ষেপ করে এবং জেনারেটরের কার্য সম্পাদন পুনরায় শুরু করে।
পাবলিক জেনারেটর::বৈধ ( অকার্যকর ) − বুল — পুনরাবৃত্তিকারী বন্ধ করা হয়েছে কিনা তা পরীক্ষা করুন
পাবলিক জেনারেটর::__জাগরণ ( void ) − void — জেনারেটর সিরিয়াল করা যাবে না হিসাবে একটি ব্যতিক্রম নিক্ষেপ.
জেনারেটর ক্লাস ইটারেটর ইন্টারফেস প্রয়োগ করে। জেনারেটর অবজেক্ট নতুন মাধ্যমে ইনস্ট্যান্ট করা যাবে না. যে কোন ব্যবহারকারীর সংজ্ঞায়িত ফাংশন ফলন কীওয়ার্ড সহ জেনারেটর শ্রেণীর অবজেক্ট তৈরি করে।
জেনারেটরের উদাহরণ
যেহেতু জেনারেটর ইটারেটর ইন্টারফেস প্রয়োগ করে, প্রতিটি লুপের জন্য ফলিত মান অতিক্রম করতে ব্যবহার করা যেতে পারে।
<?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
নিচের উদাহরণে জেনারেটর ক্লাসের বর্তমান() এবং পরবর্তী() পদ্ধতি ব্যবহার করা হয়েছে ফলিত মান অতিক্রম করতে। লুপ কন্ডিশন বৈধ() পদ্ধতি দিয়ে চেক করা হয়।
উদাহরণ
<?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