php 中对象变量存储的是对象标识符(handle),而非实际数据,因此赋值操作不会复制对象,而是共享同一实例;若需独立副本,必须显式使用 `clone` 或其他深拷贝策略。
在 PHP 中,对象不是按值传递的——这是与标量类型(如 int、string)最根本的区别。当你执行 $newlist[5] = $ref;(其中 $ref 是一个对象),你并非创建了该对象的新副本,而是让 $newlist[5] 指向内存中同一个对象实例。这意味着:对 $newlist[5] 的任何修改(如调用 SetTest(5))会直接反映在原始对象上(例如 $listOfTest[4]),从而导致意外的状态污染。
clone 关键字会触发对象的浅拷贝(shallow copy):它创建一个新对象实例,并复制所有非引用型属性值。对于仅含基本类型属性(如本例中的 private int $m_test)的类,clone 完全满足需求:
function getNewList(TestBase $ref): array
{
$newlist = [
3 => clone $ref, // 新实例,独立于原对象
5 => clone $ref // 另一个新实例
];
$newlist[3]->SetTest(3);
$newlist[5]->SetTest(5);
return $newlist;
}✅ 此时 $listOfTest[4] 不再被修改,输出仍为 2、4、6。
__clone() 魔术方法:若对象包含其他对象属性(如嵌套对象、资源或动态生成的依赖),需在类中定义 __clone() 方法,手动克隆子对象,否则仍会共享引用:
public function __clone()
{
if ($this->nestedObject instanceof \stdClass) {
$this->nestedObject = clone $this->nestedObject;
}
}避免误用引用赋值(&$var):示例答案中出现的 $ref = &$listOfTest[4]; 并不能解决问题,反而加剧混淆——它使 $ref 成为 $listOfTest[4] 的引用别名,后续任何对 $ref 的修改等同于直接操作原数组元素,完全违背隔离意图。
大规模场景优化建议:
总之,PHP 的对象引用语义是明确且一致的设计
,关键在于开发者需主动识别并管理对象生命周期。永远不要假设对象赋值 = 复制;需要副本时,显式 clone 是最清晰、最可控的选择。
# php
# 区别
# 为什么
# String
# 标识符
# int
# private
# var
# 值传递
# 引用传递
# copy
# 对象
# 序列化
# 的是
# 是一个
# 进阶
# 这是
# 句柄
# 当你
# 或其他
# 解决问题
# 并不能
相关文章:
太原网站制作公司有哪些,网约车营运证查询官网?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
简历在线制作网站免费,免费下载个人简历的网站是哪些?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
建站主机数据库如何配置才能提升网站性能?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
如何在腾讯云服务器快速搭建个人网站?
制作旅游网站html,怎样注册旅游网站?
建站之星logo尺寸如何设置最合适?
如何快速搭建高效可靠的建站解决方案?
如何在Golang中指定模块版本_使用go.mod控制版本号
建站之星北京办公室:智能建站系统与小程序生成方案解析
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
建站之星代理如何优化在线客服效率?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
建站之星3.0如何解决常见操作问题?
高端企业智能建站程序:SEO优化与响应式模板定制开发
三星网站视频制作教程下载,三星w23网页如何全屏?
用v-html解决Vue.js渲染中html标签不被解析的问题
建站主机CVM配置优化、SEO策略与性能提升指南
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
Android自定义listview布局实现上拉加载下拉刷新功能
高防服务器租用首荐平台,企业级优惠套餐快速部署
魔毅自助建站系统:模板定制与SEO优化一键生成指南
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
网站制作壁纸教程视频,电脑壁纸网站?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
专业商城网站制作公司有哪些,pi商城官网是哪个?
网站app免费制作软件,能免费看各大网站视频的手机app?
如何在IIS中新建站点并解决端口绑定冲突?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
南平网站制作公司,2025年南平市事业单位报名时间?
如何基于PHP生成高效IDC网络公司建站源码?
韩国服务器如何优化跨境访问实现高效连接?
山东网站制作公司有哪些,山东大源集团官网?
定制建站流程步骤详解:一站式方案设计与开发指南
如何通过FTP服务器快速搭建网站?
常州自助建站费用包含哪些项目?
建站之星如何快速更换网站模板?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何通过商城自助建站源码实现零基础高效建站?
建站之星如何配置系统实现高效建站?
海南网站制作公司有哪些,海口网是哪家的?
电商网站制作公司有哪些,1688网是什么意思?
大连网站制作公司哪家好一点,大连买房网站哪个好?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
Python lxml的etree和ElementTree有什么区别
Android滚轮选择时间控件使用详解
*请认真填写需求信息,我们会在24小时内与您取得联系。