首頁 > 後端開發 > PHP問題 > php yield是什麼意思?

php yield是什麼意思?

coldplay.xixi
發布: 2023-03-01 20:16:01
原創
4951 人瀏覽過

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

php 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程式設計從入門到精通

#

以上是php yield是什麼意思?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板