PHP foreach по ссылке вызывает странный сбой при переходе через массив объектов

У меня есть массив объектов. Объекты в основном имеют кучу свойств, потому что это объекты метаданных.

поэтому он похож на $objects[] , как на кучу элементов, которые имеют такие свойства, как: object->item1 , object->item2 и т. д.

Я хочу добавить что-то к каждому из этих объектов, поэтому …

 foreach ($objects as &$object) { $object->newItem=(something I compute); } 

то позже я хочу отобразить эти объекты в виде списка в html. Итак, я иду:

 foreach ($objects as $object) { <li><?php object output stuff here ?></li> } 

ОК. Теперь он отлично работает, за исключением того, что последний объект отбрасывается, а второй – последний объект отображается дважды. WTF ??

Это имеет смысл для вас?

Если вы повторяете по ссылке, всегда отключайте итерационную переменную:

 foreach ($objects as &$object) { // some code } unset($object); 

Выдержка из документации foreach :

Ссылка на значение $ и последний элемент массива остаются даже после цикла foreach. Рекомендуется уничтожить его unset ().

Если вы хотите понять, почему ваш код ведет себя так, как он себя ведет, читайте здесь следующее: Ссылки и foreach

Объекты всегда являются ссылками, поэтому просто удалите '&'

 foreach ($objects as $object) { $object->newItem=(something I compute); } foreach ($objects as $object) { echo "<li>{$object->someResult()}</li>"; } 

Я знаю, что вы уже получили свой ответ, но это может помочь другим разработчикам быстрее найти его.