对象复制


对象复制

在多数情况下,我们并不需要完全复制一个对象来获得其中属性。但有一个情况下确实需要:如果你有一个 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 交通频道 作文范文 让我做你的虞姬 县委书记三严三实专题三学习体会:严字当头 用在实处 每到遍地是花的季节,我总是想起他 爆汗!囧人囧事有经典,句句笑不断嘞! 嫉恨别人不如审视自己_励志文章 六一游戏日 学生观 母爱的味道作文500字 长春版四年级下册作文讲评教案 节约用电作文2400字 我是一个坚强、自信的孩子400字 捨得的话,你会得到更多! 庆典服务 新宇航员必备七大条件 大合唱作文400字 校园里的趣事作文 我填shell申请表的一些感受 学生会团委换届竞选演讲稿 肉麻感人的话:你是小鸡我是鸭,小鸭想你心如麻 动名词短语和分词短语 秋与冬的缠绵 2015开发公司年终总结 吴斌死得其所 洗衣机下的小蝈蝈500字作文 被淋湿的阳光 初中初二作文600字:祖国我为您骄傲 岁月,是无痕的禅思…… 德育校长述职报告 一把小红伞作文600字 中等职业学校校长学习实践科学发展观活动个人分析检查报告 小学六年级作文700字:不要让最后一滴水成为你的眼泪 《非洲草原历险记》读后感50字 2010年九年级化学教学工作总结 一群海南人在东北雪地上载歌载舞 15中秋之夜 最难望的事 雨后的作文400字 低价竞争:中国出口贸易的顽症 小学五年级作文500字:毁灭 四年级家长会学校领导发言稿 《草房子》读后感作文600字 没有人像你想象中那么好,更多的是他们跟现实死磕到底 丁香花事 小兔交朋友200字 安徒生只是个骗子 买一只好时钟 ﹏ ﹑当伪装成为了一直习惯丶 初二实记作文1700字 初中初一作文650字:保护我们共同的共同家园 游农场作文700字

Copyright © 2016 phpStudy |