Как нажимать копию объекта в массив в PHP

Я попытался добавить объекты в массив в 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); 

Оба метода добавят последний объект во весь массив. Кажется, что объект добавляется в массив по ссылке. Есть ли способ добавить их в массив по значению?

Related of "Как нажимать копию объекта в массив в PHP"

Объекты всегда передаются по ссылке в 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;