পরিচয়
যখন একটি জেনারেটর ফাংশন কল করা হয়, অভ্যন্তরীণভাবে, জেনারেটর ক্লাসের একটি নতুন অবজেক্ট ফিরে আসে। এটি Iterator প্রয়োগ করে ইন্টারফেস. পুনরাবৃত্তিকারী ইন্টারফেস নিম্নলিখিত বিমূর্ত পদ্ধতিগুলিকে সংজ্ঞায়িত করে
- Iterator::current — বর্তমান উপাদান ফেরত দিন
- Iterator::key — বর্তমান উপাদানের কী ফেরত দিন
- Iterator::next — পরবর্তী উপাদানে এগিয়ে যান
- Iterator::rewind — ইটারেটরকে প্রথম এলিমেন্টে রিওয়াইন্ড করুন
- Iterator::valid — বর্তমান অবস্থান বৈধ কিনা তা পরীক্ষা করে
জেনারেটর একটি শুধুমাত্র ফরোয়ার্ড ইটারেটর হিসেবে কাজ করে অবজেক্ট হবে, এবং এমন পদ্ধতিগুলি প্রদান করে যা জেনারেটরের অবস্থাকে ম্যানিপুলেট করার জন্য বলা যেতে পারে, যার মধ্যে মান পাঠানো এবং এটি থেকে মান ফেরত দেওয়া সহ।
ইন্টারেটার হিসাবে জেনারেটর
নিম্নলিখিত উদাহরণে, জেনারেটর ফাংশন একটি জেনারেটর অবজেক্টের একটি ফাইলে লাইন দেয় যা ওরিচ লুপ ব্যবহার করে অতিক্রম করা যেতে পারে। ইটারেটর পদ্ধতি যেমন বর্তমান () এবং পরবর্তী () এছাড়াও আহ্বান করা যেতে পারে. যাইহোক, যেহেতু জেনারেটর শুধুমাত্র ফরোয়ার্ড-ইটারেটর, তাই কল করা হচ্ছে রিওয়াইন্ড () পদ্ধতি ব্যতিক্রম নিক্ষেপ করে
উদাহরণ
<?php function filegenerator($name) { $fileHandle = fopen($name, 'r'); while ($line = fgets($fileHandle)) { yield $line; } fclose($fileHandle); } $name="test.txt"; $file=filegenerator($name); foreach ($file as $line) echo $line; $file->rewind(); echo $file->current(); $file->next(); echo $file->current(); ?>
আউটপুট
ফাইল লাইনের ট্র্যাভার্সালের পরে, নীচে দেখানো মারাত্মক ত্রুটি প্রদর্শিত হয়
PHP User Defined Functions PHP Function Arguments PHP Variable Functions PHP Internal (Built-in) Functions PHP Anonymous functions PHP Arrow Functions PHP Fatal error: Uncaught Exception: Cannot rewind a generator that was already run