Comment copier un objet sans référence ?
P粉805922437
P粉805922437 2023-08-24 10:51:49
0
2
441
<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>
P粉805922437
P粉805922437

répondre à tous(2)
P粉038161873

Pour copier un objet, vous devez utiliser Object Clone一个>.

Pour faire cela dans votre exemple :

$x = clone $obj;

Veuillez noter que les objets peuvent utiliser des __clone() 定义自己的克隆comportements, ce qui peut vous donner un comportement inattendu, alors gardez cela à l'esprit.

P粉713846879
<?php
$x = clone($obj);

Ça devrait donc ressembler à ceci :

<?php
function refObj($object){
    foreach($object as &$o){
        $o = 'this will change to ' . $o;
    }

    return $object;
}

$obj = new StdClass;
$obj->x = 'x';
$obj->y = 'y';

$x = clone($obj);

print_r($x)

refObj($obj); // $obj is passed by reference

print_r($x)
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal