本文实例讲述了php中对象引用和复制。分享给大家供大家参考,具体如下:
引用
1
|
$tv2 = $tv1 ; |
或者
1
|
$tv2 = & $tv1 ; |
以上两种方式,效果是一样的。可以理解为linux里面的硬链接。
克隆(浅复制)
1
|
$tv2 = clone $tv1 ; |
“浅复制”:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。也就是说,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深复制
1
|
$tv4 = unserialize(serialize( $tv1 )); |
相对于“浅复制”,当然也有一个“深复制”:被复制的对象的所有的变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。也就是说,深复制把要复制的对象所引用的对象都复制了一遍。
代码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<?php header( "Content-type:text/html;charset=utf-8" ); class TvControl{ } class Tv{ private $color ; private $tvControl ; function __construct(){ $this ->color = "black" ; $this ->tvControl = new TvControl(); } function setColor( $color ){ $this ->color = $color ; } function getColor(){ return $this ->color; } function getTvControl(){ return $this ->tvControl; } } $tv1 = new Tv(); $tvControl1 = $tv1 ->getTvControl(); echo "原始类:" ; var_dump( $tv1 ); echo "<hr/>" ; $tv2 = $tv1 ; echo "引用类:" ; var_dump( $tv2 ); echo "<hr/>" ; $tv3 = clone $tv1 ; echo "克隆(浅复制):" ; var_dump( $tv3 ); echo "<hr/>" ; $tv4 = unserialize(serialize( $tv1 )); echo "深复制:" ; var_dump( $tv4 ); |
输出结果:
原始类:
object(Tv)[1]
private 'color' => string 'black' (length=5)
private 'tvControl' =>
object(TvControl)[2]
引用类:
object(Tv)[1]
private 'color' => string 'black' (length=5)
private 'tvControl' =>
object(TvControl)[2]
克隆(浅复制):
object(Tv)[3]
private 'color' => string 'black' (length=5)
private 'tvControl' =>
object(TvControl)[2]
深复制:
object(Tv)[4]
private 'color' => string 'black' (length=5)
private 'tvControl' =>
object(TvControl)[5]
参考文章:http://www.zzvips.com/article/183632.html
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/koastal/article/details/52163483