Я люблю 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
?>

Красотище!

Join the Conversation

7 Comments

  1. В мане сказано так:

    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 и так передаются по ссылке.

  2. 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, проверь у себя на локалхосте, я тебя не обманываю =)

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

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

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

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

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

Leave a comment

Your email address will not be published.

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