Wie kopiere ich ein Objekt ohne Referenz?
P粉805922437
P粉805922437 2023-08-24 10:51:49
0
2
450
<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粉805922437
P粉805922437

Antworte allen(2)
P粉038161873

要复制对象,您需要使用对象克隆一个>.

要在您的示例中执行此操作,请执行以下操作:

$x = clone $obj;

请注意,对象可以使用 __clone() 定义自己的克隆行为,这可能会给您带来意想不到的行为,因此请记住这一点。

P粉713846879
&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)
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage