You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 11:15:34