PHP 的 foreach 实际上是如何工作的?
PHP 中的 Foreach 支持三种类型的值的迭代:数组、普通对象和可遍历的对象。
数组和对象迭代:
对于数组和对象来说,迭代机制比较复杂。 PHP数组实际上是按照插入顺序遍历的有序字典。迭代普通对象与迭代数组类似,因为对象属性也存储为字典。
在迭代过程中,不直接使用内部数组指针。相反,使用 HashPointer 来跟踪当前元素。循环体运行后,HashPointer 将被恢复,但前提是该元素仍然存在。否则,将使用当前数组指针。
如果数组不是引用且引用计数大于 1,则在迭代之前进行复制。进行此复制是为了防止 IAP 更改泄漏到原始数组。
迭代期间的修改:
PHP 允许在迭代期间进行修改,这可能会导致一些令人困惑的行为。如果在迭代过程中删除了一个元素,则只有 HashPointer 备份/恢复机制成功,HashPointer 才会前进到下一个元素。如果失败,将使用当前数组指针(位于数组末尾)。
嵌套循环也会影响 foreach 的行为。如果外层循环的当前元素被删除,则外层循环将在第一次迭代后停止,因为 HashPointer 将无法恢复。
PHP 7 更改:
PHP 7 对 foreach 迭代引入了一些更改:
以上是PHP 的'foreach”循环实际上是如何工作的?的详细内容。更多信息请关注PHP中文网其他相关文章!