php的迴圈與引用的一個坑,php循環參考_PHP教程

來源:互聯網
上載者:User

php的迴圈與引用的一個坑,php循環參考


上代碼

$arr = array(    'a'=> 'a11',    'b'=> 'b22',    'c'=> 'c33',);  foreach ($arr as $k=>&$v){    // Do somethind}foreach ($arr as $k=>$v){    var_dump($v);}

這樣的代碼, var_dump 會輸出什麼? 各位可以試試, 答案

string(3) "a11"string(3) "b22"string(3) "b22"

結果裡, 第三行變成了 key='b' 的value. 問題就出在第一個迴圈的引用.

今天就踩到了一個這樣的坑, 查問題用了很久. 簡單來說, foreach迴圈使用的引用, 迴圈結束後有所保留. php.net 著重寫了:

Warning

Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().

對於上面這個例子, 第一個迴圈結束後, $v引用仍然存在. 由於兩個迴圈的變數命名一致, 第二個迴圈開始, $v 每次都會被賦值. 直到最後, $v 被設定成了

前一個元素的值.

原理很簡單, 文檔寫的明明白白. 但如果工作中遇到相關的bug是很坑的, 定位需要很久. 還得需要寫碼的時候就注意:

1. 減少引用的使用

2. 如果需要在foreah使用引用, 應該用函數將封裝起來

http://www.bkjia.com/PHPjc/1098446.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1098446.htmlTechArticlephp的迴圈與引用的一個坑,php循環參考 上代碼 $arr = array ( 'a'= 'a11', 'b'= 'b22', 'c'= 'c33', ); foreach ( $arr as $k = $v ){ // Do somethind } foreach ( $arr as...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.