有的时候咱们须要在一个项目里面,使用两个或多个同样的对象,若是你使用“new”关键字从新建立对象的话,再赋值上相同的属性,这样作比较烦琐并且也容易出错,因此要根据一个对象彻底克隆出一个如出一辙的对象,是很是有必要的,并且克隆之后,两个对象互不干扰。php
在PHP4中咱们使用“clone”这个关键字克隆对象;this
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
|
<?
class
Person {
// 下面是人的成员属性
var
$name
;
// 人的名子
var
$sex
;
// 人的性别
var
$age
;
// 人的年龄
// 定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
function
__construct(
$name
=
""
,
$sex
=
""
,
$age
=
""
) {
$this
->name =
$name
;
$this
->sex =
$sex
;
$this
->age =
$age
;
}
// 这我的能够说话的方法,说出本身的属性
function
say() {
echo
"个人名子叫:"
.
$this
->name .
" 性别:"
.
$this
->sex .
" 个人年龄是:"
.
$this
->age .
"<br>"
;
}
}
$p1
=
new
Person(
"张三"
,
"男"
, 20);
// 使用“clone”克隆新对象p2,和p1对象具备相同的属性和方法。
$p2
=
clone
$p1
;
$p2
->say();
?>
|
PHP4定义了一个特殊的方法名“__clone()”方法,是在对象克隆时自动调用的方法,用“__clone()”方法将创建一个与原对象拥有相同属 性和方法的对象,若是想在克隆后改变原对象的内容,须要在__clone()中重写本来的属性和方法, “__clone()”方法能够没有参数,它自 动包含$this和$that两个指针,$this指向复本,而$that指向本来;spa
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
|
<?
class
Person {
// 下面是人的成员属性
var
$name
;
// 人的名子
var
$sex
;
// 人的性别
var
$age
;
// 人的年龄
// 定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
function
__construct(
$name
=
""
,
$sex
=
""
,
$age
=
""
) {
$this
->name =
$name
;
$this
->sex =
$sex
;
$this
->age =
$age
;
}
// 这我的能够说话的方法, 说出本身的属性
function
say() {
echo
"个人名子叫:"
.
$this
->name .
" 性别:"
.
$this
->sex .
" 个人年龄是:"
.
$this
->age .
"<br>"
;
}
// 对象克隆时自动调用的方法, 若是想在克隆后改变原对象的内容,须要在__clone()中重写本来的属性和方法
function
__clone() {
// $this指的复本p2, 而$that是指向本来p1,这样就在本方法里,改变了复本的属性。
$this
->name =
"我是假的 $that->name"
;
$this
->age = 30;
}
}
$p1
=
new
Person(
"张三"
,
"男"
, 20);
$p2
=
clone
$p1
;
$p1
->say();
$p2
->say();
?>
|
上例输出:指针
个人名子叫:张三 性别:男 个人年龄是:20 个人名子叫:我是假的张三 性别:男 个人年龄是:30