Я попытался добавить объекты в массив в PHP, но это не сработало, попробовал 2 метода:
# 1
$obj->var1 = 'string1'; $obj->var2 = 'string1'; $arr[] = $obj; $obj->var1 = 'string2'; $obj->var2 = 'string2'; $arr[] = $obj;
# 2
$obj->var1 = 'string1'; $obj->var2 = 'string1'; array_push($arr,$obj); $obj->var1 = 'string2'; $obj->var2 = 'string2'; array_push($arr,$obj);
Оба метода добавят последний объект во весь массив. Кажется, что объект добавляется в массив по ссылке. Есть ли способ добавить их в массив по значению?
Объекты всегда передаются по ссылке в php 5 или новее. Если вы хотите получить копию, вы можете использовать оператор clone
$obj = new MyClass; $arr[] = clone $obj;
Вы должны сначала клонировать объект перед внесением изменений:
$obj->var1 = 'string1'; $obj->var2 = 'string1'; $arr[] = $obj; $obj = clone $obj; // Clone the object $obj->var1 = 'string2'; $obj->var2 = 'string2'; $arr[] = $obj;
В PHP 5 объекты передаются по ссылке, если вы не указали иное.
Здесь вы, вероятно, захотите clone
объект, когда вы добавляете его в массив:
$obj->var1 = 'string1'; $obj->var2 = 'string1'; $arr[] = clone $obj; $obj->var1 = 'string2'; $obj->var2 = 'string2'; $arr[] = clone $obj;
См. Руководство .
Попробуй это:
$arr[] = clone $obj;