AI 赋能应用,代码定义未来
用全新 AI 数字人・智能应用・重构数字体验服务

PHP对象赋值与克隆

发表日期:2026-03-09 浏览次数:1154 来源:互联网 编辑:深正互联

在php5 的对象编程经常提到“默认情况下对象是通过引用传递的”。

普通的赋值操作只是传递了索引,只有在清除传值对象的时候,才会发生写时复制

``` 

//示例


$obj = new StdClass;

$obj->name = 'Pig';

dump($obj);                     


$copy = $obj;                      // $obj ,$copy都是new StdClass返回的同一个标识符的拷贝

dump($copy);                      //{ ["name"]=>string(3) "Pig" }


$objRef = &$obj;                   // 此时会将$obj转换成引用,然后赋值给$objRef,因此$obj,$objRef都为引用                

dump($objRef);                          // { ["name"]=>string(3) "Pig" }


$objClone = clone $obj;             //新空间

$obj->name = 'After Clone';

dump($objClone); //{ ["name"]=> "Pig" }

dump($obj);  //{ ["name"]=>"After Clone" }


//unset是删除引用效果

$nameRef = &$obj->name;   //$obj->name被转换成引用(& string),然后赋给$nameRef

dump($obj); //{ ["name"]=>&string(11) "After Clone" }

unset($nameRef);  //删除引用

dump($obj); // { ["name"]=>string(11) "After Clone" }


//null是赋值效果        

$nameRef = &$obj->name;//恢复name的引用

dump($obj); // { ["name"]=>&string(11) "After Clone" }

$nameRef = null;                

dump($obj);  //{ ["name"]=>&NULL }


unset($objRef); //仅删除引用

dump($obj);//{ ["name"]=>&NULL }


$objRef = &$obj; //恢复对象引用

$obj->name = 'Lucy';

$obj = null;    //赋值$obj为null,$obj只是new StdClass的标识拷贝,不会影响其内容。

                     //$objRef做为$obj的引用,会同时被赋值null

                     //等价 $objRef = null;


dump($obj,$copy,$objRef,$objClone);

// NULL,

//  { ["name"]=>&string(4) "Lucy" },

// NULL,

// { ["name"]=>string(3) "Pig" }


```


情景:在一个项目里面使用两个或多个一样的对象,如果使用 new 关键字重新创建对象,再赋值上相同的属性

优处理:PHP 提供了对象克隆功能,可以根据一个对象完全克隆出一个一模一样的对象,而且克隆以后,两个对象互不干扰。

```

//示例

class Person {

    private $name;

    private $age;


    function __construct($name, $age) {

        $this->name=$name;

        $this->age=$age;

    }


    function say() {

        echo "我的名字叫:".$this->name."<br />";

    echo "我的年龄是:".$this->age;

    }

}


$p1 = new Person("张三", 20);

$p2 = clone $p1;

$p2->say() //我的名字叫:张三

//我的年龄是:20

```


拓展 ```__clone()```

__clone() 方法只会在对象被克隆的时候自动调用。用意在克隆后改变原对象的内容

深正互联


本站文章均为深正网站建设摘自权威资料,书籍,或网络原创文章,如有版权纠纷或者违规问题,请即刻联系我们删除,我们欢迎您分享,引用和转载,但谢绝直接搬砖和抄袭!感谢...
关注深正互联
填写电话 ≠ 打扰
只给您多一份选择,少一份顾虑
您可拨打以下电话联系我们技术总监
138 2888 4598
用心将技术和服务
遍布全中国乃至世界...
138-2888-4598
我们坚信无论您在哪里我们都能为您提供优质的服务!
请填写您的需求
您希望我们为您提供什么服务呢
数字人 AI应用 O2O电商 智联AioT APP开发 小程序开发 ERP/CRM系统开发 电脑系统开发
您的预算
3万-5万 5万-8万 8万-10万 10万-15万 15万以上
0.669189s