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
您也可以控制$key
在foreach
使用
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中文網其他相關文章!