2011-04-11 71 views
7

我試圖將對象添加到PHP數組,但它沒有工作,嘗試了2種方法:如何把一個對象的副本到陣列中的PHP

#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); 

這兩種方法都會將最新的對象添加到整個數組中。似乎該對象是通過引用添加到數組中的。有沒有辦法將它們按值添加到數組中?

回答

12

對象總是通過引用在PHP 5或更高版本通過。如果你想要一個副本,您可以使用克隆操作

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

那裏只有通過引用在PHP 5中我相信! – RobertPitt 2011-04-11 17:55:28

+0

@RobertPitt是的,在PHP 4中,對象在這種情況下通過值傳遞。但在PHP 5中,對象通過引用傳遞。 – Michael 2011-04-11 18:37:34

+0

@邁克爾,我暗示你在你的文章中引用它。 – RobertPitt 2011-04-11 19:15:02

0

嘗試這種情況:

$arr[] = clone $obj; 
3

你必須作出修改之前,先克隆對象:

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

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

$obj->var1 = 'string2'; 
$obj->var2 = 'string2'; 
$arr[] = $obj; 
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