Comment copier un objet sans référence ?
P粉805922437
2023-08-24 10:51:49
<p>Il est bien documenté que les objets PHP5 POO sont passés par référence par défaut. Si c'est la valeur par défaut, il me semble qu'il existe un moyen autre que celui par défaut de copier sans référence, qu'en est-il ? ? </p>
<pre class="brush:php;toolbar:false;">fonction refObj($objet){
foreach($objet comme &$o){
$o = 'cela deviendra ' $o;
}
renvoie $objet ;
}
$obj = nouvelle Classe Std ;
$obj->x = 'x';
$obj->y = 'y';
$x = $obj ;
print_r($x)
// objet (classestd)#1 (3) {
// ["x"]=> chaîne(1) "x"
// ["y"]=> chaîne(1) "y"
// }
// $obj = refObj($obj); // pas besoin de le faire car
refObj($obj); // $obj est passé par référence
print_r($x)
// objet (classestd)#1 (3) {
// ["x"]=> string(1) "cela deviendra x"
// ["y"]=> string(1) "cela deviendra y"
// }</pré>
<p>À ce stade, je m'attendais à ce que <code>$x</code> soit le <code>$obj</code>, mais bien sûr, ce n'est pas le cas. Existe-t-il un moyen simple de le faire ou dois-je écrire du code comme celui-ci</p>
Pour copier un objet, vous devez utiliser Object Clone一个>.
Pour faire cela dans votre exemple :
Veuillez noter que les objets peuvent utiliser des
__clone()
定义自己的克隆
comportements, ce qui peut vous donner un comportement inattendu, alors gardez cela à l'esprit.Ça devrait donc ressembler à ceci :