Kelas penjana PHP

WBOY
Lepaskan: 2023-08-29 11:14:02
ke hadapan
589 orang telah melayarinya

Kelas penjana PHP

Pengenalan

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.

Syntax

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
}
Salin selepas log masuk

Kaedah

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 ditutup

public 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 Penjana

Memandangkan penjana melaksanakan antara muka Iterator, setiap gelung boleh digunakan untuk mengulang nilai yang dijana.

Demonstrasi Langsung

<?php
function squaregenerator(){
   for ($i=1; $i<=5; $i++){
      yield $i*$i;
   }
}
$gen=squaregenerator();
foreach ($gen as $val){
   echo $val . " ";
}
?>
Salin selepas log masuk

Output

Atur cara di atas menunjukkan output berikut

1 4 9 16 25
Salin selepas log masuk

Contoh berikut menggunakan kaedah semasa() dan seterusnya() kelas penjana untuk mengulang nilai yang dijana. Gunakan kaedah valid() untuk menyemak keadaan gelung.

Contoh

Demonstrasi Langsung

<?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();
}
?>
Salin selepas log masuk

Output

Program di atas menunjukkan output berikut

key: 0 value: 1
key: 1 value: 4
key: 2 value: 9
key: 3 value: 16
key: 4 value: 25
Salin selepas log masuk

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

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan