PHP 的 foreach 實際上是如何運作的?
PHP 中的 Foreach 支援三種類型的值的迭代:陣列、普通物件和可遍歷的物件。
陣列與物件迭代:
對陣列和物件來說,迭代機制比較複雜。 PHP數組其實是按照插入順序遍歷的有序字典。迭代普通物件與迭代數組類似,因為物件屬性也儲存為字典。
在迭代過程中,不直接使用內部陣列指標。相反,使用 HashPointer 來追蹤當前元素。循環體運行後,HashPointer 將被恢復,但前提是該元素仍然存在。否則,將使用目前數組指標。
如果數組不是引用且引用計數大於 1,則在迭代之前進行複製。進行此複製是為了防止 IAP 變更洩漏到原始陣列。
迭代期間的修改:
PHP 允許在迭代期間進行修改,這可能會導致一些令人困惑的行為。如果在迭代過程中刪除了一個元素,則只有 HashPointer 備份/復原機製成功,HashPointer 才會前進到下一個元素。如果失敗,將使用目前數組指標(位於數組末尾)。
巢狀迴圈也會影響 foreach 的行為。如果外層循環的目前元素被刪除,則外層循環將在第一次迭代後停止,因為 HashPointer 將無法恢復。
PHP 7 變更:
PHP 7 對foreach 迭代引入了一些變更:
以上是PHP 的「foreach」迴圈實際上是如何運作的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!