Il semble qu'en PHP les objets sont passés par référence. Même les opérateurs d'affectation ne semblent pas créer une copie de l'objet.
Voici une preuve simple et artificielle:
<?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'
?>
Dans les deux cas d'impression, je reçois «après»
Alors, comment passer $ a à set_b () par valeur, pas par référence?
(object) ((array) $objectA)
peut entraîner les mêmes résultats souhaités avec de meilleures performances que l'utilisation de clone $objectA
ou new stdClass
.