Melakukan lelaran pada sejumlah besar data menggunakan struktur gelung (seperti foreach) akan memerlukan banyak memori dan masa pemprosesan yang banyak. Gunakan Generator untuk mengulangi set data tanpa overhed ini. Fungsi penjana adalah seperti fungsi biasa. Walau bagaimanapun, bukannya pernyataan pemulangan dalam fungsi, penjana dilaksanakan berulang kali menggunakan kata kunci hasil untuk memberikan nilai yang akan diulang.
Kata kunci hasil adalah teras mekanisme penjana. Walaupun penggunaannya kelihatan serupa dengan pulangan, ia tidak menghentikan pelaksanaan fungsi. Ia memberikan nilai lelaran seterusnya dan menjeda pelaksanaan fungsi.
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 }
public Generator::current ( void ) − mix — Dapatkan nilai yang dijana
public Generator::getReturn ( void ) : mix 🜎 public Generator::key ( void ) − mix
— Dapatkan kunci nilai yang dijana.p>public Generator::next ( void ) − void
— Menyambung semula pelaksanaan generator. Kesannya adalah sama seperti memanggil Generator::send() dengan NULL sebagai hujah.Penjana awam::rewind ( void ) − void
— Gulung semula iterator. Ini akan membuang pengecualian jika lelaran telah dimulakan.public Generator::send (mixed $value) : mix
- Menghantar nilai yang diberikan kepada generator sebagai hasil daripada ekspresi hasil semasa dan memulihkan generator.public Generator::throw ( Throwable $exception ) − mix
— Melemparkan pengecualian ke dalam penjana dan menyambung semula pelaksanaan penjana.public Generator::valid ( void ) − bool
— Semak jika iterator telah ditutuppublic Generator::__wakeup ( void ) − void
— Naikkan pengecualian kerana penjana tidak boleh bersiri.Kelas penjana melaksanakan antara muka Iterator. Objek penjana tidak boleh dijadikan instantiated melalui baru. Mana-mana fungsi yang ditentukan pengguna dengan kata kunci hasil mencipta objek kelas penjana.
Contoh PenjanaMemandangkan penjana melaksanakan antara muka Iterator, setiap gelung boleh digunakan untuk mengulang nilai yang dijana.<?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() . ""; $gen->next(); } ?>
key: 0 value: 1 key: 1 value: 4 key: 2 value: 9 key: 3 value: 16 key: 4 value: 25
Atas ialah kandungan terperinci Kelas penjana PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!