Перевод записи из блога Johannes Schlüter http://schlueters.de/blog/archives/141-References-and-foreach.html
Ссылки в PHP плохие. Как я уже говорил ранее, вам стоит избегать их использования. Теперь есть ещё один вариант использования, что приводит к неожиданному поведению, использование которого я не видел в реальной жизни, но было несколько докладов об этой ошибке, и недавно друг спросил меня об этом ... вот он:
Какой результат выполнения этого кода:
Для понимания, почему это происходит давайте вернемся на шаг назад и посмотрим на то, как реализованы переменные в PHP и что такое ссылки:
Ссылки в PHP плохие. Как я уже говорил ранее, вам стоит избегать их использования. Теперь есть ещё один вариант использования, что приводит к неожиданному поведению, использование которого я не видел в реальной жизни, но было несколько докладов об этой ошибке, и недавно друг спросил меня об этом ... вот он:
Какой результат выполнения этого кода:
<?php
$a = array('a', 'b', 'c', 'd');
foreach ($a as &$v) { }
foreach ($a as $v) { }
print_r($a);
?>Мы дважды проводим итерацию по массиву, ничего не делая. Так что в результате никаких изменений не должно быть. Правильно? - Неправильно! Актуальный результат выглядит следующим образом:Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => c
)
Для понимания, почему это происходит давайте вернемся на шаг назад и посмотрим на то, как реализованы переменные в PHP и что такое ссылки:
 

