Сообщение от 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 и все нормально работает если копируется в каждой итерации куда-то сразу же, не отходя от кассы (например в хтмл или в консоль). А если не копируется, а откладывается на будущее - то в будущем оказывается копия одного и то же значения у всех отложенных операций. Следовательно все что вам нужно это вручную скопировать текущее значение для будущего применения.