recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment copier un objet sans référence ?

<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粉805922437P粉805922437459 Il y a quelques jours439

répondre à tous(2)je répondrai

  • P粉038161873
  • P粉713846879

    P粉7138468792023-08-25 00:31:47

    <?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)

    répondre
    0
  • Annulerrépondre