Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perbandingan penjana PHP dan objek iterator

Perbandingan penjana PHP dan objek iterator

王林
王林ke hadapan
2023-09-16 17:41:02954semak imbas

Perbandingan penjana PHP dan objek iterator

Pengenalan

Apabila fungsi penjana dipanggil, objek kelas Penjana baharu akan dikembalikan secara dalaman. Ia melaksanakan antara muka Iterator. Antara muka iterator mentakrifkan kaedah abstrak berikut

  • Iterator::current - Mengembalikan elemen semasa
  • Iterator: :key — Mengembalikan kunci elemen semasa
  • —Motor
  • —Motor ke hadapan::nex Elemen seterusnya
  • Iterator: :rewind
  • — Gulung semula iterator ke elemen pertama
  • Iterator::valid
  • — Semak sama ada kedudukan semasa adalah sah

Penjana bertindak sebagai objectforward-only , Dan menyediakan kaedah yang boleh dipanggil untuk memanipulasi keadaan penjana, termasuk menghantar nilai kepada dan mengembalikan nilai daripada penjana.

Penjana sebagai Interaktor

Dalam contoh di bawah, fungsi penjana menjana garisan dalam fail objek penjana, yang boleh diulang menggunakan gelung oreach. Kaedah iterator seperti current() dan next() juga boleh dipanggil. Walau bagaimanapun, memandangkan penjana ialah lelaran ke hadapan sahaja, memanggil kaedah rewind() akan membuang pengecualian

Contoh

<?php
function filegenerator($name) {
   $fileHandle = fopen($name, &#39;r&#39;);
   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();
?>

Output

Selepas melelaran pada baris fail, ralat maut ditunjukkan seperti berikut

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

Atas ialah kandungan terperinci Perbandingan penjana PHP dan objek iterator. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam