儘管相信PHP 中物件是按引用傳遞的,但賦值運算符不會建立副本。以下範例程式碼示範了此行為:
class A { public $b; } function set_b($obj) { $obj->b = "after"; } $a = new A(); $a->b = "before"; $c = $a; set_b($a); print $a->b; print $c->b;
在這種情況下,兩個print 語句都將輸出“after”,表明該物件已被set_b() 函數修改,儘管該物件作為
要在PHP 中建立物件的副本,可以使用PHP 5中引入的克隆運算子:
$objectB = clone $objectA;
這個操作建立一個獨立於原始物件的新物件。對一個物件所做的任何更改都不會影響另一個物件。
需要注意的是,在 PHP 中只有物件透過引用傳遞。其他類型的變數(例如陣列、字串和整數)是按值傳遞的。這意味著將這些變數指派給其他變數會建立該變數的新實例,而不是對原始變數的參考。
以上是如何在 PHP 中建立物件的真實副本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!