Я люблю 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 комментариев

  1. C_TiGER, 6. мая 2008, 2:14

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

    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. Raz0r, 6. мая 2008, 15:51

    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. C_TiGER, 7. мая 2008, 0:11

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

     
  4. alexf2000, 7. мая 2008, 20:23

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

     
  5. Raz0r, 7. мая 2008, 21:12

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

     
  6. Аноним, 5. июня 2008, 23:38

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

     
  7. ekim, 31. января 2009, 21:31

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

     

Write a comment: