您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關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中yield關鍵字的介紹了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。