本文实例讲述了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