今天在看大话设计模式的时候,看到原型模式。其中讲到深复制与浅复制,于是搜索了一下php手册。
看php如何实现深复制与浅复制的。
<span><span>class</span><span>SubObject</span>
{</span><span>static</span><span>$instances</span> = <span>0</span>;
<span>public</span><span>$instance</span>;
<span>public</span><span><span>function</span><span>__construct</span><span>()</span>
{</span><span>$this</span>->instance = ++ <span>self</span>::<span>$instances</span>;
}
<span>public</span><span><span>function</span><span>__clone</span><span>()</span>
{</span><span>$this</span>->instance = ++<span>self</span>::<span>$instances</span>;
}
}
<span><span>class</span><span>MyCloneable</span>
{</span><span>public</span><span>$object1</span>;
<span>public</span><span>$object2</span>;
<span>public</span><span><span>function</span><span>__clone</span><span>()</span>
{</span><span>// 强制复制一份this->object, 否则仍然指向同一个对象</span><span>// 深复制[将自己的属性重新克隆一份]</span><span>$this</span>->object1 = <span>clone</span><span>$this</span>->object1;
<span>// 浅复制[引用的还是原来,并没有生成新的]</span><span>//$this->object2 = clone $this->object2;</span>
}
}
<span>$obj</span> = <span>new</span> MyCloneable();
<span>$obj</span>->object1 = <span>new</span> SubObject();
<span>$obj</span>->object2 = <span>new</span> SubObject();
<span>$obj2</span> = <span>clone</span><span>$obj</span>;
<span>print</span>(<span>"Original Object:\n"</span>);
print_r(<span>$obj</span>);
<span>print</span>(<span>"Clone Object:\n"</span>);
print_r(<span>$obj2</span>);结果
Original Object:
MyCloneable Object
(
[object1] => SubObject Object
(
[instance] => <span>1</span>
)
[object2] => SubObject Object
(
[instance] => <span>2</span>
)
)
<span>Clone</span> Object:
MyCloneable Object
(
[object1] => SubObject Object
(
[instance] => <span>3</span><span>//深复制 所以有+1</span>
)
[object2] => SubObject Object
(
[instance] => <span>2</span><span>//浅复制 并没有创建新的对象</span>
)
)
以上就介绍了PHP Clone 深复制和浅复制,包括了clone,php方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号