Перевод записи из блога 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 и что такое ссылки: