__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 ?>
本博客作为一个入门者的自学记录,欢迎各位同行者不吝赐教。