php对象复制,PHP 对象复制 - 对象复制 - phpStudy

对象复制

在多数情况下,我们并不需要完全复制一个对象来获得其中属性。但有一个情况下确实需要:如果你有一个

GTK窗口对象,该对象持有窗口相关的资源。你可能会想复制一个新的窗口,保持所有属性与原来的窗口相同,

但必须是一个新的对象(因为如果不是新的对象,那么一个窗口中的改变就会影响到另一个窗口)。还有一种情况:

如果对象A中保存着对象B的引用,当你复制对象A时,你想其中使用的对象不再是对象B而是B的一个副本,那么

你必须得到对象A的一个副本。

对象复制可以通过clone关键字来完成(如果对象中存在__clone()方法,会先被调用)。对象中的

__clone()方法不能直接调用。

$copy_of_object = clone $object;

当对象被复制后,PHP5会对对象的所有属性执行一个“浅复制”(shallow copy)。所有的属性中的引用

仍然不变,指向原来的变量。如果定义了__clone()方法,则新创建的对象(复制生成的对象)中的__clone()方法会被调用,

可用于修改属性的值(如果有必要的话)。

Example #1 复制一个对象

static$instances=0;

public$instance;

public function__construct() {$this->instance= ++self::$instances;

}

public function__clone() {$this->instance= ++self::$instances;

}

}

classMyCloneable{

public$object1;

public$object2;

function__clone()

{// 强制复制一份this->object, 否则仍然指向同一个对象$this->object1= clone$this->object1;

}

}$obj= newMyCloneable();$obj->object1= newSubObject();$obj->object2= newSubObject();$obj2= clone$obj;

print("Original Object:

");print_r($obj);

print("Cloned Object:

");print_r($obj2);?>

以上例程会输出:

Original Object:

MyCloneable Object

(

[object1] => SubObject Object

(

[instance] => 1

)

[object2] => SubObject Object

(

[instance] => 2

)

)

Cloned Object:

MyCloneable Object

(

[object1] => SubObject Object

(

[instance] => 3

)

[object2] => SubObject Object

(

[instance] => 2

)

)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值