Давным-давно, во времена PHP 4, кодить было страшно неудобно. Например, в циклах foreach() невозможно было изменять значение элементов массива – приходилось использовать for(), что, например, меня жутко раздражало. Недавно обнаружил, что PHP версии 5 предоставляет такую возможность: для того, чтобы изменять элементы массива нужно передавать их по ссылке (by reference), т.е. добавлять & перед названием переменной:
<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // теперь $arr это массив 2, 4, 6, 8 ?>
Красотище!
7 replies on “Я люблю PHP 5 =)”
В мане сказано так:
As of PHP 5, you can easily modify array’s elements by preceding $value with &. This will assign reference instead of copying the value.
То есть это решение для пхп4.
В пхп5 элементы в foreach и так передаются по ссылке.
As of PHP 5, you can easily modify array’s elements by preceding $value with &. This will assign reference instead of copying the value.
перевожу:
Что касается PHP 5, то вы можете легко изменять значения элементов масива с помощью добавления символа & перед переменной $value. Это установит ссылку вместо копирования значения.
В PHP 5 элементы в foreach не передаются по ссылке. Проверил на PHP 5.2.5:
Результат:
А теперь с &:
Результат:
C_TiGER, проверь у себя на локалхосте, я тебя не обманываю =)
Да: действительно =) Хм, может меня глючит, но вроде раньше, мб на 4й версии передавались и так в foreach по ссылке.
Неряшливый и крючкотворческий стиль программирования ни к чему хорошему не приводит. Представь, что этот код через 5 лет после его написания будет править тупой индус/студент за $200. Заметит ли он & в цикле и если да то с какого раза?
Заметит или не заметит – это проблемы индуса, одно из самых важнейших качеств программиста – это внимательность. Например в C/C++ очень часто используются разнообразные конструкции с использованием ссылок на адреса в памяти, и это не считается крючковатым или тем более неряшливым, поскольку использование разных приемов в программировании – необходимость.
гг приколько, пойду пару функ-й перепишу =)
PHP всегда передает переменную по ссылке, а делает копию ее лишь в том случает, если ее начинают менять