码迷,mamicode.com
首页 > Web开发 > 详细

大话设计模式第九章---原型模式PHP实现

时间:2015-08-30 15:39:35      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

首先,PHP对象clone参考资料:

http://php.net/manual/en/language.oop5.cloning.php#object.clone

 

Object Cloning ¶

Creating a copy of an object with fully replicated properties is not always the wanted behavior. A good example of the need for copy constructors, is if you have an object which represents a GTK window and the object holds the resource of this GTK window, when you create a duplicate you might want to create a new window with the same properties and have the new object hold the resource of the new window. Another example is if your object holds a reference to another object which it uses and when you replicate the parent object you want to create a new instance of this other object so that the replica has its own separate copy.

An object copy is created by using the clone keyword (which calls the object‘s __clone() method if possible). An object‘s __clone() method cannot be called directly.

$copy_of_object = clone $object;

When an object is cloned, PHP 5 will perform a shallow copy of all of the object‘s properties. Any properties that are references to other variables will remain references.

 

void __clone ( void )

Once the cloning is complete, if a __clone() method is defined, then the newly created object‘s __clone() method will be called, to allow any necessary properties that need to be changed.

 

 

Example #1 Cloning an object

<?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()
    {
        // Force a copy of this->object, otherwise
        // it will point to same object.
        $this->object1 = clone $this->object1;
    }
}

$obj = new MyCloneable();

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

$obj2 = clone $obj;


print("Original Object:\n");
print_r($obj);

print("Cloned Object:\n");
print_r($obj2);

?>

The above example will output:

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
        )

)

 

PHP中,其实用clone关键字加上__clone()便可以实现浅复制与深复制,__clone()方法就是那个抽象出来的接口。

 

 

大话设计模式第九章---原型模式PHP实现

标签:

原文地址:http://www.cnblogs.com/wy0314/p/4770924.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!