Categories
Ideas

Я люблю PHP 5 =)

Давным-давно, во времена 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:

<?php
$arr=array(1,2,3,4);
foreach($arr as $value) {
$value = $value * 2;
}
print_r($arr);
?>

Результат:

Array
( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )

А теперь с &:

<?php
$arr=array(1,2,3,4);
foreach($arr as &$value) {
$value = $value * 2;
}
print_r($arr);
?>

Результат:

Array
( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )

C_TiGER, проверь у себя на локалхосте, я тебя не обманываю =)

Да: действительно =) Хм, может меня глючит, но вроде раньше, мб на 4й версии передавались и так в foreach по ссылке.

Неряшливый и крючкотворческий стиль программирования ни к чему хорошему не приводит. Представь, что этот код через 5 лет после его написания будет править тупой индус/студент за $200. Заметит ли он & в цикле и если да то с какого раза?

Заметит или не заметит – это проблемы индуса, одно из самых важнейших качеств программиста – это внимательность. Например в C/C++ очень часто используются разнообразные конструкции с использованием ссылок на адреса в памяти, и это не считается крючковатым или тем более неряшливым, поскольку использование разных приемов в программировании – необходимость.

гг приколько, пойду пару функ-й перепишу =)

PHP всегда передает переменную по ссылке, а делает копию ее лишь в том случает, если ее начинают менять

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.