首页 > 后端开发 > php教程 > PHP 的'foreach”循环在 PHP 5 和 PHP 7 中如何工作?

PHP 的'foreach”循环在 PHP 5 和 PHP 7 中如何工作?

Linda Hamilton
发布: 2024-12-31 03:22:10
原创
268 人浏览过

How Does PHP's `foreach` Loop Work in PHP 5 and PHP 7?

理解 PHP 的 'foreach' 循环

'foreach' 支持迭代三种类型的值:

  • 数组
  • 正常对象
  • 可遍历对象

数组和对象迭代

数组和对象作为有序字典进行遍历。遍历普通对象与遍历数组类似,因为它们在内部表示为有序字典。

迭代期间的内部变化

  • 按引用数组迭代或迭代对象(按句柄语义)允许在迭代时进行循环内修改。
  • 迭代引用计数大于 1 的数组可能会在修改之前重复数组。

PHP 5 方法

  • 使用内部数组指针 (IAP)跟踪位置。
  • 另外采用 HashPointer 来支持多个同时“foreach”循环。
  • 如果引用计数大于 1 并且数组不是引用,则会发生数组重复。
  • IAP 推进发生在 循环体运行之前。

PHP 7方法

  • 完全放弃 IAP 使用。
  • 引入在数组中注册的哈希表迭代器来处理迭代中的修改。
  • 按值进行数组重复仅当在循环期间修改数组时才会发生数组迭代。
  • 'foreach' 行为不存在不再受‘current()’或‘reset()’影响。

您问题的解答

1.这是正确的吗?

您将“foreach”理解为使用数组副本但影响数组指针是正确的。然而,在 PHP 7 中,“foreach”不再使用 IAP,而是依赖于哈希表迭代器,从而产生更加一致和可预测的行为。

2.它到底在做什么?

  • PHP 5:使用 IAP 和 HashPointer 的组合来支持迭代,在某些情况下可能会出现重复和意外行为。
  • PHP 7:使用不受“foreach”循环影响的哈希表迭代器,并正确处理迭代过程中的修改迭代。

3.在某些情况下,在“foreach”期间使用调整数组指针的函数会影响循环的结果吗?

  • PHP 5:“each()”和“reset()”可以影响嵌套“foreach”循环的行为,甚至可能因哈希冲突而遇到意外行为。
  • PHP 7: 调整数组指针的函数对“foreach”行为没有影响,因为它不再依赖于IAP。

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

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