php官方文件yield http://php.net/manual/zh/language.generators.overview.php
參考:http://laravelacademy.org/post/4317.html
生成器提供了一種更容易的方法來實現簡單的物件迭代,相比較定義類別實作Iterator 介面的方式,效能開銷和複雜性大大降低。
生成器允許你在 foreach 程式碼區塊中寫程式碼來迭代一組資料而不需要在記憶體中建立一個陣列, 那會使你的記憶體達到上限,或者會佔據可觀的處理時間。相反,你可以寫一個生成器函數,就像一個普通的自定義函數一樣, 和普通函數只返回一次不同的是, 生成器可以根據需要 yield 多次,以便生成需要迭代的值。
<code><span>$length</span> = <span>1000000</span>; <span>//生成器</span><span>foreach</span> (yieldTest(<span>$length</span>) <span>as</span><span>$v1</span>) { <span>echo</span><span>$v1</span>; } <span><span>function</span><span>yieldTest</span><span>(<span>$length</span>)</span> {</span><span>for</span>(<span>$i</span> = <span>0</span>; <span>$i</span> < <span>$length</span>; <span>$i</span>++) { <span>yield</span><span>$i</span> . <span>'Camel'</span>; } } <span>/* 迭代器 以下的代码会抛出错误: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes) in /var/www/test/90/yield/demo01.php on line 38 */</span><span>foreach</span>(iteratorTest(<span>$length</span>) <span>as</span><span>$v2</span>) { <span>echo</span><span>$v2</span>; } <span><span>function</span><span>iteratorTest</span><span>(<span>$length</span>)</span> {</span><span>$data</span> = []; <span>for</span>(<span>$i</span> = <span>0</span>; <span>$i</span> < <span>$length</span>; <span>$i</span>++) { <span>$data</span>[] = <span>$i</span> . <span>'Camel'</span>; } <span>return</span><span>$data</span>; }</code>
如果要使用特定方式計算大量數據,如操作Excel表數據,對效能影響更甚。此時我們可以使用生成器,即時計算並產出後續值,不佔用寶貴的記憶體空間,使用的記憶體更少。
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });以上就介紹了 php55新增特性yield產生器,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。