有的時候咱們須要在一個項目裏面,使用兩個或多個同樣的對象,若是你使用「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