foreach循環時指針移動、賦值、執行循環體的順序數組
結果:
2-c
停留在最後一次賦值spa
起初我是這麼理解的:因爲此次foreach並無對數組進行增刪改操做,那$v是指向$arr[$k]的內存地址的,每循環一次後,$v指向$arr的下一個單元,直至到最後一個單元,而且試圖再往下一個單元移動,可是發現什麼都沒有($k、$v都爲空)
結果我又理解錯了
foreach循環一次,數組中的指針移動一次,數組中的指針並非$v指向$arr[$k]內存地址的那條線,不是$v的指向直接指向數組的下一個單元,而是數組的指針移動到下一個單元,若是爲空,$k和$v的指向則不用移動,若是不爲空,$k和$v的指向移動到數組的下一個單元指針
結果:
1
從結果能夠看出是先賦值$v,再執行循環體,這個也是天然的,若是不先給$k和$v賦值,循環體中用到了$k和$v,值從哪裏來呢ip
打印出2,說明發生數組拷貝以前、也就是說執行循環體以前,數組的指針已經移動到了第二個單元
因此foreach的執行順序應該是這樣的:
foreach開始執行,先初始化指針,
賦值,移動指針,再執行循環體
指針合法···
賦值、移動指針、循環體···內存