我试图在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);
两种方法都会将最新的对象添加到整个数组中。似乎该对象通过引用添加到数组中。有没有办法按值将它们添加到数组中?
答案 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;
答案 3 :(得分:0)
试试这个:
$arr[] = clone $obj;