克隆对象__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
相关文章
相关标签/搜索