克隆對象__clone()方法

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