কম্পিউটার

পিএইচপি জেনারেটর বনাম ইটারেটর অবজেক্ট


পরিচয়

যখন একটি জেনারেটর ফাংশন কল করা হয়, অভ্যন্তরীণভাবে, জেনারেটর ক্লাসের একটি নতুন অবজেক্ট ফিরে আসে। এটি 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

  1. আপনি কিভাবে পিএইচপি 5 এ রেফারেন্স দ্বারা অবজেক্ট পাস করবেন?

  2. পিএইচপি-তে অবজেক্টের অ্যারে থেকে একটি সম্পত্তি বের করুন

  3. পিএইচপি-তে বেনামী বস্তু তৈরি করা

  4. পাইথনে জেনারেটর?