Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kelas penjana PHP

Kelas penjana PHP

WBOY
WBOYke hadapan
2023-08-29 11:13:07540semak imbas

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
}

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 . " ";
}
?>

Output

Atur cara di atas menunjukkan output berikut

1 4 9 16 25

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();
}
?>

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

Atas ialah kandungan terperinci Kelas penjana PHP. 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