php yield是什麼意思?

2020-07-16 10:06:28

php yield的意思是該yield關鍵字從發電機函數返回資料,yield語句看起來很像return語句,yield不是停止函數的執行並返回,而是為迴圈生成器的程式碼提供一個值,並暫停生成器函數的執行。

php yield的意思是:

1、什麼yield?

該yield關鍵字從發電機函數返回資料:

生成器函數的核心是yield關鍵字。以最簡單的形式,yield語句看起來很像return語句,yield不是停止函數的執行並返回,而是為迴圈生成器的程式碼提供一個值,並暫停生成器函數的執行。

2、什麼是生成器函數?

生成器函數實際上是編寫疊代器的一種更緊湊,更有效的方法。它允許您定義一個函數(您的xrange),該函數將

在 您遍歷該函數時_計算並返回_ 值:

foreach (xrange(1, 10) as $key => $value) {
    echo "$key => $value", PHP_EOL;
}

這將建立以下輸出:

0 => 1
1 => 2
…
9 => 10

您也可以控制$keyforeach使用

yield $someKey => $someValue;

在generator函數中,$someKey是您想要顯示的內容$key$someValue是中的值$val。在問題的範例中為$i

3、與正常功能有何不同?

現在您可能想知道為什麼我們不僅僅使用PHP的本機range函數來實現該輸出。是的,你是。輸出將是相同的。區別在於我們到達那裡的方式。

當我們使用rangePHP,將執行它,在記憶體中建立一個數位的整個陣列,並return認為 整個陣列

的foreach迴圈,然後將去在它和輸出的值。換句話說,foreachwill將對陣列本身進行操作。該range功能和foreach唯一的「交談」一次。可以將其想像為通過郵件獲取包裹。送貨員會把包裹交給您,然後離開。然後解開整個包裝,取出裡面的任何東西。

當我們使用生成器函數時,PHP將逐步進入該函數並執行,直到遇到結尾或yield關鍵字為止。當遇到a時yield,它將把當時的值返回外迴圈。然後,它返回到生成器函數,並從產生的地方繼續。由於您xrange擁有一個for迴圈,它將執行並屈服直到$max達到。想像它foreach和發生器打乒乓球。

4、我為什麼需要那個?

顯然,生成器可用於解決記憶體限制。根據您的環境,執行range(1, 1000000)遺囑會使您的指令碼致命,而對生成器執行同樣的操作會很好。或如Wikipedia所述:

由於生成器僅根據需要計算其屈服值,因此它們對於表示昂貴或無法立即計算的序列很有用。這些包括例如無限序列和實時資料流。

發電機也應該很快。但是請記住,當我們談論快速時,我們通常會以很小的數目交談。因此,在您開始執行並更改所有程式碼以使用生成器之前,請進行基準測試以了解在何處有意義。

生成器的另一個用例是非同步協程。該yield關鍵字不僅返回值,但它也接受他們。有關此內容的詳細資訊,請參見下面連結的兩個出色的部落格文章。

5、從什麼時候起可以使用yield?

生成器已在 PHP 5.5中

引入。嘗試使用yield該版本之前的版本會導致各種解析錯誤,具體取決於關鍵字後面的程式碼。因此,如果您從該程式碼中遇到了解析錯誤,請更新您的PHP。

以上就是php yield是什麼意思?的詳細內容,更多請關注TW511.COM其它相關文章!