Sembra che in PHP gli oggetti vengano passati per riferimento. Persino gli operatori di assegnazione non sembrano creare una copia dell'oggetto.
Ecco una semplice prova inventata:
<?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'
?>
In entrambi i casi di stampa sto ottenendo 'dopo'
Quindi, come faccio a passare $ a a set_b () per valore, non per riferimento?
(object) ((array) $objectA)
potrebbe ottenere gli stessi risultati desiderati con prestazioni migliori rispetto all'utilizzo di clone $objectA
o new stdClass
.