«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2019/03/06 14:30:52  №1360209 1
Господа, вопросик.
Клонирую объект в свойстве которого лежит массив объектов. Правильно я понимаю, что объекты в массиве тож надо клонировать с помощью __clone()? Если да, то правильной ли будет вот такая функция:

function __clone()
{
\tforeach ($this->arrayWithObjects as $key => $object)
{
\t\t$this->arrayWithObjects[$key] = clone $object;
\t}
}
Ответы: >>1360214 >>1360530
Аноним 2019/03/06 14:38:41  №1360214 2
>>1360209
Ты ведь просто перезаписываешь объект, клонируя его. Какой смысл?
Ответы: >>1360216 >>1360530
Аноним 2019/03/06 14:45:23  №1360216 3
>>1360214
Потом мне нужно работать с этими объектами в массиве и изменять их, но так чтобы оригинальные не поменялись.
Ответы: >>1360353
Аноним 2019/03/06 18:08:04  №1360353 4
>>1360216
Ты в тот же самый массив записываешь тот же самый объект с тем же ключом. Какой смысл? Массив у тебя как был один, так и будет. Или ты все-таки в другой клонируешь?
Ответы: >>1360452
Аноним 2019/03/06 19:59:23  №1360452 5
>>1360353
В тот же массив я записываю клоны объектов, чтобы потом их изменять, без изменения оригинальных объектов.
Ответы: >>1360493
Аноним 2019/03/06 22:41:38  №1360493 6
>>1360452
Ты берешь и перезаписываешь оригинал его клонированной копией. Так понятно?

function __clone()
{
foreach (твойМассив как $ключ => $значение) {
твойМассив[$ключ] (текущий ключ форыча, - прим. автора) = clone $объект
}
}

Это равноценно такому

$arr = [0 => 'a', 1 => 'b'];
//первая итерация
foreach ($arr as 0 => 'a') {
$arr[0] = 'a';
}

То есть форыч берет и перезаписывает значение на то же самое. Чтобы работать с копиями, тебе необходимо положить их в новый массив.