PHP可克隆对象
我在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
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$obj有人能解释一下到底发生了什么吗?这个调用是MyCloneable
类的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
关键字。那里到底发生了什么?