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

Posted Z.X

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单理解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深复制浅复制问题的主要内容,如果未能解决你的问题,请参考以下文章

PHP浅复制与深复制

原型模式——浅复制与深复制

python中对列表浅复制深复制另类的理解方式

深入理解javaScript的深复制和浅复制

Java中的深复制和浅赋值

深拷贝和浅拷贝怎样理解(通俗具体点儿)