php中使用foreach的一個“坑”

前幾天同事發了一段代碼給我,問執行結果是什麼,代碼如下:

乍看是會打印:

"a11"
"b22"
"c33"

但是實際運行效果確是:

"a11"
"b22"
"b22"

很費解爲什麼是這個輸出,有想到是第一個foreach中&符號的原因,但是具體爲什麼會這樣確沒有想到,使用php的vld擴展打印了一下OPCODE也沒有看出個所以然:

故翻看了一下php的源碼,使用gdb調試php源碼第二個foreach的處理邏輯時發現最後php數組中最後一個元素總是會變成當前遍歷元素的值,之後纔想到原來是因爲$v是數組最後一個元素的引用,所以每次$v變化數組最後一個元素也會跟着變化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章