PHP中修改一个对象值导致另一对象值变更的问题
PHP对象赋值后原对象被修改的原因及解决方法
问题原因
PHP里对象赋值默认是引用传递,而非值传递。当你执行$varObjCopy = $varObj时,并没有创建新的对象实例,只是让$varObjCopy指向了和$varObj完全相同的内存地址。所以修改$varObjCopy的属性,本质上是在操作同一个对象,原对象的属性自然会跟着变化。
解决方法:真正复制对象
要实现修改新对象时不影响原对象,需要使用clone关键字创建独立的对象副本:
$varObj = (object) ['id'=>'20','title'=>'Test ID 20','product'=>'4']; var_dump($varObj -> id); // 输出20 $varObjCopy = clone $varObj; // 克隆原对象生成独立实例 $varObjCopy -> id = $varObj -> product; var_dump($varObj -> id); // 仍输出20,原对象属性未被修改
如果你的对象包含嵌套的子对象(需要深拷贝场景),还需要在对象对应的类中实现__clone()方法,手动处理内部对象的复制逻辑。但你的示例是简单关联数组转对象,直接用clone就能满足需求。
内容的提问来源于stack exchange,提问作者PhizoR
相关产品推荐
相关产品推荐

