首頁  >  文章  >  後端開發  >  PHP生成器類

PHP生成器類

WBOY
WBOY轉載
2023-08-29 11:13:07539瀏覽

PHP生成器類

簡介

使用循環結構(例如foreach)遍歷大量資料將需要大量記憶體和相當長的處理時間。使用生成器可以迭代一組資料而無需這些開銷。生成器函數與普通函數類似。然而,generator 並不是函數中的 return 語句,而是使用 yield 關鍵字來重複執行,以便提供要迭代的值。

yield 關鍵字是生成器機制的核心。儘管它的用法看起來與 return 類似,但它不會停止函數的執行。它提供迭代的下一個值並暫停函數的執行。

語法

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 — 取得產生的值

#public Generator::getReturn ( void ) : mix — 取得生成器的回傳值

public Generator::key ( void ) − mix — 取得產生值的鍵。

p>

public Generator::next ( void ) − void — 復原產生器的執行。與使用 NULL 作為參數呼叫 Generator::send() 的效果相同。

public Generator::rewind ( void ) − void — 倒回迭代器。如果迭代已經開始,這將引發異常。

public Generator::send (mixed $value) : mix - 將給定值作為當前yield表達式的結果發送到生成器並恢復生成器。

public Generator::throw ( Throwable $exception ) − mix — 將例外狀況拋出到生成器中並恢復生成器的執行。

public Generator::valid ( void ) − bool — 檢查迭代器是否已關閉

public Generator::__wakeup ( void ) − void — 由於生成器無法序列化而引發異常。

Generator 類別實作 Iterator 介面。生成器物件不能透過 new 實例化。任何具有yield關鍵字的使用者定義函數都會建立生成器類別的物件。

生成器範例

由於生成器實作了Iterator接口,因此每個迴圈都可以用於遍歷產生值。

 現場示範

<?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

下列範例使用產生器類別的current() 和next() 方法來遍歷產生值。使用 valid() 方法檢查迴圈條件。

範例

 即時示範

<?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

以上是PHP生成器類的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除