[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ссылочный синтаксис foreach-"затирание" переменных
Страницы: 1, 2
ПАХОМ
Здравствуйте, форумчане!
Отдельное Здравствуйте, jetistyum!

Вот что я тестирую

<?php ## Работа со ссылками № 1
echo "Вот массив, с которым работают оба кода: 100, 313, 605 <br>";
$numbers1 = array(100, 313, 605);
foreach ($numbers1 as &$v) $v++;
echo "Вот что получается: ";
foreach ($numbers1 as $v) echo "<br> $v";
var_dump($numbers1); //дамп всего массива после того как по нему прошелся цикл
?>
<?php
## Работа со ссылками № 2
$numbers = array(100, 313, 605);
foreach ($numbers as &$v) $v++;
echo "<br> Вот что получается: ";
foreach ($numbers as $elt) echo "<br> $elt";
var_dump($numbers); //дамп всего массива после того как по нему прошелся цикл
?>

Первая часть (Работа со ссылками № 1) при выводе результата третьим значением выводит 314, вместо 606.

killer8080
Цитата (ПАХОМ @ 10.11.2012 - 22:26)
Как раз по этой причине мы используем переменную $elt, а не все ту же $v, в последнем цикле вывода листинга: иначе бы последний элемент массива $numbers, которому соответствует жесткая ссылка $v, "затирался" при последующей итерации по массиву.


Автор книги - говнокодер, не стоит следовать его советам. Просто запомни простое правило, если используешь в цикле передачу по ссылке, всегда убивай ссылочную переменную, и таких недоразумений никогда не будет!
$numbers = array(100, 313, 605); 
foreach ($numbers as &$v)
$v++;
unset($v);

ПАХОМ
Здравствуйте!

Думаю что со временем дойдёт истина и до меня.

killer8080 спасибо за решительность в закрытии этой темы smile.gif

ПС: может посоветуете нормальных авторов по PHP программированию?


С уважением,
Василий.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.