php 深复制

WBOY
Freigeben: 2016-06-06 20:30:22
Original
1140 Leute haben es durchsucht

<code>php</code><code>class test{
    public $num = 100;
}
$a = new test();
$b = clone $a;
$a->num = 200;
echo $b->num;//100

class test{
    public $num = 100;
}
$a = new test();
$b = $a;
$a->num = 200;
echo $b->num;//200
//数组
$a = [1,2,3];
$b = $a;
$a[1] = 5;
var_dump($b);//[1,2,3]

$a = [1,2,3];
$b = &$a;
$a[1] = 5;
var_dump($b);//[1,5,3]
//以上就是php的深复制,浅复制,对吗?
</code>
Nach dem Login kopieren
Nach dem Login kopieren

回复内容:

<code>php</code><code>class test{
    public $num = 100;
}
$a = new test();
$b = clone $a;
$a->num = 200;
echo $b->num;//100

class test{
    public $num = 100;
}
$a = new test();
$b = $a;
$a->num = 200;
echo $b->num;//200
//数组
$a = [1,2,3];
$b = $a;
$a[1] = 5;
var_dump($b);//[1,2,3]

$a = [1,2,3];
$b = &$a;
$a[1] = 5;
var_dump($b);//[1,5,3]
//以上就是php的深复制,浅复制,对吗?
</code>
Nach dem Login kopieren
Nach dem Login kopieren

<code>class SubTest {
    public $num = 100;
}

class Test {
    public $child;

    function __construct($child){
        $this->child = $child;
    }
}

$a = new Test(new SubTest());
// 这里进行浅拷贝
$b = clone $a;
$b->child->num = 200;

// 以下输出均是 200
echo $a->child->num, "\n";
echo $b->child->num, "\n";

class Test2 {
    public $child;

    function __construct($child){
        $this->child = $child;
    }

    // clone 完成时,此方法会被调用,在此完成深拷贝动作
    function __clone() {
        $this->child = clone $this->child;
    }
}

$a = new Test2(new SubTest());
// 这里进行深拷贝
$b = clone $a;
$b->child->num = 200;

// 以下输出是 100, 200
echo $a->child->num, "\n";
echo $b->child->num, "\n";
</code>
Nach dem Login kopieren

参考 PHP: 对象复制

题主的代码中包含了两个概念对象拷贝和引用。请参考 对象和引用 。

对于深复制和浅复制,不好描述,楼上的代码也体现出来了差别,在献上两张比较直观的图,这样好理解一点吧。
浅复制
php 深复制
深复制
php 深复制

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage