Bagaimana untuk menyalin objek tanpa rujukan?
P粉805922437
P粉805922437 2023-08-24 10:51:49
0
2
433
<p>Adalah didokumentasikan dengan baik bahawa objek PHP5 OOP diluluskan secara rujukan secara lalai. Jika ini adalah lalai, nampaknya saya ada cara bukan lalai untuk menyalin tanpa rujukan, bagaimana pula? ? </p> <pre class="brush:php;toolbar:false;">function refObj($object){ foreach($objek sebagai &$o){ $o = 'ini akan bertukar kepada ' $o; } pulangkan $objek; } $obj = StdClass baharu; $obj->x = 'x'; $obj->y = 'y'; $x = $obj; print_r($x) // object(stdClass)#1 (3) { // ["x"]=> // ["y"]=> // } // $obj = refObj($obj); // tidak perlu melakukan ini kerana refObj($obj); // $obj diluluskan dengan rujukan print_r($x) // object(stdClass)#1 (3) { // ["x"]=> rentetan(1) "ini akan bertukar kepada x" // ["y"]=> rentetan(1) "ini akan bertukar kepada y" // }</pre> <p>Pada ketika ini saya menjangkakan <code>$x</code> menjadi <code>$obj</code>, tetapi sudah tentu tidak. Adakah terdapat cara mudah untuk melakukan ini atau adakah saya perlu menulis kod seperti ini</p>
P粉805922437
P粉805922437

membalas semua(2)
P粉038161873

Untuk menyalin objek anda perlu menggunakan Klon Objek一个>.

Untuk melakukan ini dalam contoh anda:

$x = clone $obj;

Sila ambil perhatian bahawa objek boleh menggunakan __clone() 定义自己的克隆 gelagat, yang mungkin memberi anda gelagat yang tidak dijangka, jadi ingat perkara ini.

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

Jadi ia sepatutnya kelihatan seperti ini:

<?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)
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!