Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP可克隆对象_Php_Object_Clone - Fatal编程技术网

PHP可克隆对象

PHP可克隆对象,php,object,clone,Php,Object,Clone,我在PHP手册中介绍了这个示例 <?php class SubObject { static $instances = 0; public $instance; public function __construct() { $this->instance = ++self::$instances; } public function __clone() { $this->instance = ++se

我在PHP手册中介绍了这个示例

<?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;
        $this->object2 = clone $this->object2;
    }
}

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

?>

当我执行这个
$obj2=clone$objMyCloneable
类的
function\uu clone()
还是
子对象
类的
public function\uu clone()


循序渐进的解释会更有帮助。谢谢。

克隆
函数处理
克隆
关键字。使用

$obj2 = clone $obj;
可以表示为

$obj2 = $obj::__clone();
但这对你来说是显而易见的

clone…
调用
MyCloneable
类的
\u clone
方法。它与
子对象
类无关
object1
object2
是属于类
MyCloneable
$obj
对象的唯一属性

当然,当您调用
clone
时,
object1
object2
属性将被克隆,但它们仍然是对象的属性。
$obj2
将属于
MyCloneable

我的回答满足你的需要吗

编辑:
clone
方法中的
MyCloneable::\uu clone()
关键字正在创建
$object1
$object2
属性的克隆。实际上,它不会给出任何结果,因为您正在将克隆分配给这些克隆的制造商。
MyCloneable::\uu clone()
中发生了什么-它正在调用
子对象::\uu clone()
方法,该方法实际上执行以下操作:

$this->instance = ++self::$instances;

请注意,
instances
属性是静态的,因此每次创建现有对象的新对象或克隆对象时,
instances
都会增加。

感谢您的回答。当你说克隆时。。。调用MyCloneable类的uu clone方法。
MyCloneable
类的
\uu clone()
中还有另一个
clone
关键字。那里到底发生了什么?