sdfasd
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
<?php
/**
* 原型模式(深拷贝+浅拷贝)
*/
declare
(strict_types=1);
//开启强类型模式
class
CopyObj
{
public
$array
;
}
//抽象原型类
abstract
class
Prototype
{
protected
$attach
;
public
function
__construct(CopyObj
$obj
)
{
$this
->attach =
$obj
;
}
public
function
set(
$name
,
$value
)
{
$this
->
$name
=
$value
;
}
public
function
get(
$name
)
{
return
$this
->
$name
;
}
public
function
getAttach()
{
return
$this
->attach;
}
abstract
public
function
clone
();
}
class
DeepCopy
extends
Prototype
{
public
function
clone
()
{
$obj
=
clone
$this
;
return
$obj
;
}
}
class
ShallowCopy
extends
Prototype
{
public
function
clone
()
{
$serializeObj
= serialize(
$this
);
$obj
= unserialize(
$serializeObj
);
return
$obj
;
}
}
|
123
123
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//----------深拷贝--------------
$chairman
=
new
CopyObj();
$chairman
->
array
= [
'×××'
,
'×××'
,
'江泽明'
];
$deepCopyObj1
=
new
DeepCopy(
$chairman
);
$deepCopyObj2
=
$deepCopyObj1
->
clone
();
echo
"<pre>"
;
var_dump(
$deepCopyObj1
->getAttach());
var_dump(
$deepCopyObj2
->getAttach());
//修改对象
$chairman
->
array
= [
'×××'
,
'×××'
];
var_dump(
$deepCopyObj1
->getAttach());
var_dump(
$deepCopyObj2
->getAttach());
|
asdsad
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//-------------浅拷贝-------------
$start
=
new
CopyObj();
$start
->
array
= [
'刘德华'
,
'张学友'
,
'郭富城'
,
'黎明'
];
$deepCopyObj3
=
new
ShallowCopy(
$start
);
$deepCopyObj4
=
$deepCopyObj3
->
clone
();
var_dump(
$deepCopyObj3
->getAttach());
var_dump(
$deepCopyObj4
->getAttach());
//修改对象
$start
->
array
= [
'周杰伦'
];
var_dump(
$deepCopyObj3
->getAttach());
var_dump(
$deepCopyObj4
->getAttach());
|
本文转自 hgditren 51CTO博客,原文链接:http://blog.51cto.com/phpme/2047833,如需转载请自行联系原作者