Dường như trong các đối tượng PHP được truyền bằng tham chiếu. Ngay cả các toán tử gán cũng không xuất hiện để tạo một bản sao của Object.
Đây là một bằng chứng đơn giản, dễ hiểu:
<?php
class A {
public $b;
}
function set_b($obj) { $obj->b = "after"; }
$a = new A();
$a->b = "before";
$c = $a; //i would especially expect this to create a copy.
set_b($a);
print $a->b; //i would expect this to show 'before'
print $c->b; //i would ESPECIALLY expect this to show 'before'
?>
Trong cả hai trường hợp in tôi đều nhận được 'sau'
Vậy, làm thế nào để tôi chuyển $ a đến set_b () theo giá trị chứ không phải bằng tham chiếu?
(object) ((array) $objectA)
có thể dẫn đến kết quả bạn mong muốn với hiệu suất tốt hơn sau đó sử dụng clone $objectA
hoặc new stdClass
.