Показать сообщение отдельно
  #7 (permalink)  
Старый 14.07.2015, 06:15
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от 0leg9
Появляется только последняя картинка
Когда ваш цикл мгновенно накидал в память отложенных операций, то аргументом obj каждой операции оказался один и то же объект из массива - самый последний. Потому что внутри цикла оно все - референс, ссылка.

Что там дал рони почитать - то будет понятно только тем, кто и так понимает.

Понимать надо разницу между передачей значения переменной по ссылке на переменную - by reference, и копии значения переменной - by value.

Например значения аргументов функции всегда копируются, если не указано иначе. Например в нормальном скрипте типа php:

Каноничная передача by val:

function foo($bar){ $bar.=' jump'; echo $bar;};


само собой значение переменной используемой в качестве аргумента не будет испорчено действиями функции.

$text='How to';

bar($text); // выведет How to jump

echo $text // вывод How to



А вот если передавать по ссылке

function foo(&$bar){ echo $bar;};


то

$text='How to';

bar($text); // выведет How to jump

echo $text // вывод How to jump


то функция "испортит" значение, поменяет его, запишет свое и в таком роде.

На жабе таких примеров не могу привести, она явно не дает определять режим.

Но ясно что внутри цикла все его аргументы крутятся by ref и все нормально работает если копируется в каждой итерации куда-то сразу же, не отходя от кассы (например в хтмл или в консоль). А если не копируется, а откладывается на будущее - то в будущем оказывается копия одного и то же значения у всех отложенных операций. Следовательно все что вам нужно это вручную скопировать текущее значение для будущего применения.

Последний раз редактировалось kostyanet, 14.07.2015 в 06:18.
Ответить с цитированием