首页 > 代码库 > 简单理解php深复制浅复制问题

简单理解php深复制浅复制问题

其实接触深复制浅复制是通过学习c++了解到的,比如c++很好用的模板,php是不允许方法模板和类模板

一个简单的例子,如果不是很了解php 的取地址符&,可以去看下官方文档,php的&就是别名

class zx{
    
    public  $r =‘44444444<br>‘;
    public function __construct() {
        
    }
    public function ccccc() {
        echo $this->r;
    }
}

$rr = new zx();
 
//$ee = $rr;      1
//$ee =&$rr;      2
$ee = clone $rr;  3


$ee->r =‘33333<br>‘;

$ee->ccccc();
$rr->ccccc();

 

1和2的运行结果是  33333<br>33333<br>

3的结果是33333<br>44444444<br>

只有在使用clone的时候才是真的裂变2个内存空间,不然都是使用的同一段内存

 

比如还有一些复杂情况,依赖注入的时候或者在使用类对象变量注入类方法的时候,一些特殊状况等

 

 

一个小例子,抽象方法的也不一定非需要继承才能使用比如,某个抽象方法里面有个static 静态方法也是可以直接使用到的

注意:静态方法不能使用$this操作变量和方法,不然会报错

abstract class vv{
    
    static $tt =‘1111‘;
    public static function dddd() {
        echo self::$tt;
    }
}

vv::dddd();

 

简单理解php深复制浅复制问题