通过引用的PHP foreach在遍历对象数组时会导致奇怪的故障

Bre*_*enn 19 php foreach

我有一个对象数组.对象主要有一堆属性,因为它们是元数据对象.

所以就像 $objects[]是像一串具有类似性质的项目: object->item1,object->item2,等.

我想为每个对象添加一些东西,所以......

foreach ($objects as &$object) {
  $object->newItem=(something I compute);
}
Run Code Online (Sandbox Code Playgroud)

然后,我想在html中将这些对象显示为列表.所以,我去:

foreach ($objects as $object) {
  <li><?php object output stuff here ?></li>
}
Run Code Online (Sandbox Code Playgroud)

好.现在,它工作正常,除了最后一个对象被丢弃,倒数第二个对象显示两次.WTF?

你能理解这个吗?

Nik*_*kiC 36

如果通过引用进行迭代,则始终取消设置迭代变量:

foreach ($objects as &$object) {
      // some code
}
unset($object);
Run Code Online (Sandbox Code Playgroud)

摘自foreach文档:

即使在foreach循环之后,$ value和最后一个数组元素的引用仍然存在.建议通过unset()销毁它.

如果您想了解代码行为方式的原因,可以进一步阅读:References和foreach

  • 用于回答问题的+1,但他并不真的需要通过引用循环,因为他正在处理对象......是吗? (3认同)
  • @Brenn:如果这个答案回答你的问题,你应该接受它,点击它旁边的绿色勾号:) (3认同)