php 產生器 入門理解

來源:互聯網
上載者:User

標籤:理解   返回   cti   內容   function   而不是   產生   輸出   相關   

 概念太晦澀,看不懂,直接上例子:

 問題:得到一個1-1000000的整數數組,然後用foreach遍曆輸出

 如果沒有產生器,這樣做:

$arr=range(1,1000000);//這個函數最終會返回一個數組;
foreach ($arr as $key => $value) {//此時遍曆的是整個放在記憶體中的數組
echo $key.‘=>‘.$value.‘<br />‘; //輸出
}
//總結:由迭代器我們可以知道,foreach的時候,每次遍曆都會操作記憶體中的數組的索引值,改變指標指向等等,
//遍曆一次,操作一次數組,這樣很耗費記憶體

如果有產生器,這樣做:
function xrange( $start ,  $limit ,  $step  =  1 ) {//簡單寫一個range()
for ( $i = $start ; $i <= $limit ; $i += $step ) {
yield $i ; //yield會將當前值返回,而不是儲存到數組中
}
}
foreach(xrange(1,1000000)as $key=>$value){//這裡遍曆時,遍曆的是一個xrange的傳回值(不是數組)
echo $key.‘=>‘."$value".‘<br />‘ ;//輸出
}
//總結:foreach每次遍曆,都會調用一次xrange函數,而每調用一次xrange函數,都能得到一個yield的傳回值,
//然後yield會將下一個值放到自己裡面,等到foreach下次遍曆yield會返回這個值,然後再將下一個值放到自己裡面...
//這就是yield,它使得foreach的時候可以不用每次遍曆都操作記憶體中的數組,遍曆的時候直接就有被遍曆的值了,
//不用再去運算元組然後再得到要被遍曆的值

至於其他相關高深內容,去查看手冊和大神們的文章吧!
ps:yield想要生效,前提是php的版本>=5.5.0



php 產生器 入門理解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.