__clone()方法和传址区别

示例:

<?php
class Computer{
public $name = '联想';
public function _run(){
return '运行中';
}
}
$comp1 = new Computer();
$comp2 = new Computer();
$comp_1 = $comp1;
$comp_2 = clone $comp2;
?>

在上边示例中我们首先要理解:

1 new Computer();创建了两个对象,分别保存在堆内存中不同区域,然后分别把两个对象的地址赋值给$comp1和$comp2(保存在栈内存中),所以呢两者中谁改变都不会影响对方

2 $comp_1 = $comp1,由于$comp1是地址,所以是把地址赋值给了$comp_1,两者都是指向的同一个堆内存区域,两者其实是一个东西,只不过名字不同,殊途同归

3 $comp_2 = clone $comp2 是克隆,字面意思,就是复制,把$comp2指向的堆内存复制一份,$_comp_2指向的就是复制的那块堆内存

另外:在类中定义__clone()方法可以改变复制的默认行为,就是自己定义复制(自己定义的复制不一定是完全一样的再来一份,定义复制是翻倍还是其他什么都可以的)

     执行复制时会自动调用__clone()函数

<?php
class Computer{
public $name = '联想';
public function __clone(){
$this->name = 'dell';
}
}
$com1 = new Computer();
$com2 = clone $com1;
echo $com2->name; //dell
?>
上一篇:Nordic nRF51/nRF52开发流程说明


下一篇:20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结