如何在PHP中将对象的副本推送到数组中

时间:2011-04-11 17:48:47

标签: php arrays

我试图在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);

两种方法都会将最新的对象添加到整个数组中。似乎该对象通过引用添加到数组中。有没有办法按值将它们添加到数组中?

4 个答案:

答案 0 :(得分:12)

对象总是通过php 5或更高版本中的引用传递。如果需要副本,可以使用克隆运算符

$obj = new MyClass;
$arr[] = clone $obj;

答案 1 :(得分:3)

在进行修改之前,您必须先克隆对象:

$obj->var1 = 'string1';
$obj->var2 = 'string1';
$arr[] = $obj;

$obj = clone $obj; // Clone the object

$obj->var1 = 'string2';
$obj->var2 = 'string2';
$arr[] = $obj;

答案 2 :(得分:1)

在PHP 5中,除非您另有说明,否则通过引用传递对象。

在这里,您可能希望在将对象添加到数组时clone该对象:

$obj->var1 = 'string1';
$obj->var2 = 'string1';
$arr[] = clone $obj;
$obj->var1 = 'string2';
$obj->var2 = 'string2';
$arr[] = clone $obj;

See the manual

答案 3 :(得分:0)

试试这个:

$arr[] = clone $obj;