Apabila fungsi penjana dipanggil, objek kelas Penjana baharu akan dikembalikan secara dalaman. Ia melaksanakan antara muka Iterator. Antara muka iterator mentakrifkan kaedah abstrak berikut
Penjana bertindak sebagai objectforward-only , Dan menyediakan kaedah yang boleh dipanggil untuk memanipulasi keadaan penjana, termasuk menghantar nilai kepada dan mengembalikan nilai daripada penjana.
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
<?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(); ?>
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!