suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Wie kopiere ich ein Objekt ohne Referenz?

<p>Es ist gut dokumentiert, dass PHP5-OOP-Objekte standardmäßig als Referenz übergeben werden. Wenn dies die Standardeinstellung ist, gibt es meines Erachtens eine nicht standardmäßige Möglichkeit zum Kopieren ohne Referenz. Wie wäre es damit? ? </p> <pre class="brush:php;toolbar:false;">function refObj($object){ foreach($object as &$o){ $o = 'dies wird sich ändern zu ' $o; } $object zurückgeben; } $obj = neue StdClass; $obj->x = 'x'; $obj->y = 'y'; $x = $obj; print_r($x) // object(stdClass)#1 (3) { // ["x"]=> string(1) "x" // ["y"]=> string(1) "y" // } // $obj = refObj($obj); // Dies ist nicht erforderlich, weil refObj($obj); // $obj wird als Referenz übergeben print_r($x) // object(stdClass)#1 (3) { // ["x"]=> string(1) "dies wird sich in x ändern" // ["y"]=> string(1) "dies wird zu y" // }</pre> <p>Zu diesem Zeitpunkt habe ich erwartet, dass <code>$x</code> der ursprüngliche <code>$obj</code> ist, aber das ist natürlich nicht der Fall. Gibt es eine einfache Möglichkeit, dies zu tun, oder muss ich Code wie diesen schreiben</p>
P粉805922437P粉805922437463 Tage vor447

Antworte allen(2)Ich werde antworten

  • P粉038161873
  • P粉713846879

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

    &lt;?php
    $x = clone($obj);

    所以它应该是这样的:

    &lt;?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)

    Antwort
    0
  • StornierenAntwort