对象复制


对象复制

在多数情况下,我们并不需要完全复制一个对象来获得其中属性。但有一个情况下确实需要:如果你有一个 GTK窗口对象,该对象持有窗口相关的资源。你可能会想复制一个新的窗口,保持所有属性与原来的窗口相同, 但必须是一个新的对象(因为如果不是新的对象,那么一个窗口中的改变就会影响到另一个窗口)。还有一种情况: 如果对象A中保存着对象B的引用,当你复制对象A时,你想其中使用的对象不再是对象B而是B的一个副本,那么 你必须得到对象A的一个副本。

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

$copy_of_object = clone $object;

当对象被复制后,PHP5会对对象的所有属性执行一个“浅复制”(shallow copy)。所有的属性中的引用 仍然不变,指向原来的变量。如果定义了__clone()方法,则新创建的对象(复制生成的对象)中的__clone()方法会被调用, 可用于修改属性的值(如果有必要的话)。

Example #1 复制一个对象

<?php
class SubObject
{
    static 
$instances 0;
    public 
$instance;

    public function 
__construct() {
        
$this->instance = ++self::$instances;
    }

    public function 
__clone() {
        
$this->instance = ++self::$instances;
    }
}

class 
MyCloneable
{
    public 
$object1;
    public 
$object2;

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

$obj = new MyCloneable();

$obj->object1 = new SubObject();
$obj->object2 = new SubObject();

$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
        )

)

«  Final关键字
» 对象比较
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 二十年后的同学会作文 改变自己的九个绝好建议 2015年医院护士述职报告范文 2015民主生活会制度 在全县三个文明建设表彰暨招商引资攻坚年活动动员大会上的讲话_会议发言 教育活动督导研判评价报告 我渴望成功作文550字 游蜀南竹海作文800字 成熟在微笑作文700字 仓库保管试用期工作总结 班级年度工作总结(2) 自嘲之人作文100字 CFB锅炉发电机组的节能技术探讨 对于旅行的感悟 关于遗忘的唯美句子摘抄 初中初一作文900字:怎样做出不平凡的事业? 工人入党申请书1500字范文 浅析“板块模式”的理论及应用 神鸟续写作文500字 苏教版二年级上册数学期末试卷 换个形象? 什么造就了斯达康传奇? 享受我不成功的人生 妹妹,火辣辣地望我一眼 伤心了,要坚强作文300字 我想变成一只小玉兔 恪守检察职业道德心得体会 2015班主任工作总结(1) 小学三年级作文400字:美丽的嘉陵江 【写给自己】 写给海伦的一封信 友爱永驻作文1200字 2016小学生的自我介绍作文 学《渴望读书的“大眼睛”》有感500字 生活(转载)作文600字 君子之交淡如水的意思 平安是福 怪天气作文700字 初二历史教师工作总结(2) 团干部竞选演讲稿 躲在墙角的父亲 《真心英雄》作文500字 药店如何让顾客持续满意 排遣块垒的抱怨 我要自由作文 感谢北大踹了我一脚 三严三实之严以修身专题研讨学习体会 讲党性重品行作表率演讲稿之二 计算机系生产实习报告 做大事就是要冲动

Copyright © 2016 phpStudy |