首页 > 后端开发 > php教程 > PHP 的'foreach”循环实际上是如何工作的?

PHP 的'foreach”循环实际上是如何工作的?

Mary-Kate Olsen
发布: 2025-01-02 22:56:39
原创
547 人浏览过

How Does PHP's `foreach` Loop Actually Work Under the Hood?

PHP 的 foreach 实际上是如何工作的?

PHP 中的 Foreach 支持三种类型的值的迭代:数组、普通对象和可遍历的对象。

数组和对象迭代:

对于数组和对象来说,迭代机制比较复杂。 PHP数组实际上是按照插入顺序遍历的有序字典。迭代普通对象与迭代数组类似,因为对象属性也存储为字典。

在迭代过程中,不直接使用内部数组指针。相反,使用 HashPointer 来跟踪当前元素。循环体运行后,HashPointer 将被恢复,但前提是该元素仍然存在。否则,将使用当前数组指针。

如果数组不是引用且引用计数大于 1,则在迭代之前进行复制。进行此复制是为了防止 IAP 更改泄漏到原始数组。

迭代期间的修改:

PHP 允许在迭代期间进行修改,这可能会导致一些令人困惑的行为。如果在迭代过程中删除了一个元素,则只有 HashPointer 备份/恢复机制成功,HashPointer 才会前进到下一个元素。如果失败,将使用当前数组指针(位于数组末尾)。

嵌套循环也会影响 foreach 的行为。如果外层循环的当前元素被删除,则外层循环将在第一次迭代后停止,因为 HashPointer 将无法恢复。

PHP 7 更改:

PHP 7 对 foreach 迭代引入了一些更改:

  • 使用哈希表迭代器而不是内部数组指针。这允许同时进行多个 foreach 循环而不会发生冲突。
  • 仅当数组被修改时,才会在按值迭代期间发生数组重复。以前,即使仅引用数组,也会发生重复。
  • 即使在按值上下文中,对象现在的行为也类似于引用。
  • foreach 的行为不再受 reset() 或其他方法的影响更改数组指针的函数。

以上是PHP 的'foreach”循环实际上是如何工作的?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板