新闻详情

新闻详情

首页 / 资讯中心 / 详情

PHP对象深拷贝与浅拷贝机制

发布时间:2026/9/1 13:26:21来源:尧图网络
PHP对象深拷贝与浅拷贝机制
PHP对象深拷贝与浅拷贝机制PHP的对象赋值是引用传递clone是创建副本。深拷贝和浅拷贝的区别在处理嵌套对象时很重要。今天说说PHP中的对象拷贝。对象的赋值是引用。phpclass User{public function __construct(public string $name,public Address $address) {}}class Address{public function __construct(public string $city) {}}$addr new Address(北京);$u1 new User(张三, $addr);$u2 $u1; // 引用同一个对象$u2-name 李四;echo u1: {$u1-name}\n; // 李四echo u2: {$u2-name}\n; // 李四?浅拷贝用clone。php$u1 new User(张三, new Address(北京));$u2 clone $u1;$u2-name 李四;echo u1: {$u1-name}\n; // 张三基本类型深拷贝$u2-address-city 上海;echo u1: {$u1-address-city}\n; // 上海引用类型浅拷贝?深拷贝用__clone实现。phpclass User2{public function __construct(public string $name,public Address $address) {}public function __clone(): void{// 深拷贝内部的引用类型$this-address clone $this-address;}}$u1 new User2(张三, new Address(北京));$u2 clone $u1;$u2-address-city 上海;echo u1: {$u1-address-city}\n; // 北京深拷贝echo u2: {$u2-address-city}\n; // 上海?数组的拷贝行为。php// 普通数组是值拷贝$arr1 [1, 2, 3];$arr2 $arr1;$arr2[0] 999;echo arr1[0]: {$arr1[0]}\n; // 1echo arr2[0]: {$arr2[0]}\n; // 999// 对象数组是浅拷贝$objArr1 [new User(张三, new Address(北京))];$objArr2 $objArr1;$objArr2[0]-name 李四;echo objArr1[0]-name: {$objArr1[0]-name}\n; // 李四?深拷贝的工具函数。phpfunction deepClone(object $object): object{return unserialize(serialize($object));}// PHP 7.4 可以用 __serialize/__unserialize$u1 new User(张三, new Address(北京));$u2 deepClone($u1);$u2-address-city 上海;echo u1: {$u1-address-city}\n; // 北京深拷贝echo u2: {$u2-address-city}\n; // 上海?理解PHP的对象拷贝机制可以避免意外的引用传递。clone创建浅拷贝__clone实现深拷贝。序列化/反序列化实现完全深拷贝。在操作嵌套对象时要注意引用关系避免意外修改。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

阿里云TTS语音合成实战:mod_ali_tts模块接入与调优指南 2026/9/2 2:26:43

阿里云TTS语音合成实战:mod_ali_tts模块接入与调优指南

简介:mod_ali_tts.zip 是面向 FreeSWITCH 开发与运维人员的 TTS 放音模块,基于阿里云语音合成技术,可让 FreeSWITCH 通过 playback 应用直接播放 TTS 文本,也支持预合成缓存(tts_cache://)与 API 动态管理合…

阅读更多 →
微服务不是银弹:何时该拆、代价与演进实践 2026/9/2 2:26:43

微服务不是银弹:何时该拆、代价与演进实践

直接给结论:微服务不是“更高级的架构”,而是一组为“组织规模扩大和业务复杂度上升”做的取舍。它真正解决的问题,是独立部署、独立扩展、故障隔离和团队自治。很多人把“上了微服务”当成系统先进的标准,结果拆完以后&#xff0…

阅读更多 →
SAR成像RD算法详解与MATLAB仿真实现 2026/9/2 2:26:43

SAR成像RD算法详解与MATLAB仿真实现

简介:合成孔径雷达RD算法的MATLAB实现适合SAR成像学习与科研人员使用。程序将原始回波数据依次经过距离压缩、多普勒参数估计、距离徙动校正与方位压缩等核心环节,最终输出目标图像,覆盖RD算法的完整处理链路;代码结构清晰、注释详…

阅读更多 →
FDE实战:股票分析Agent开发,从需求拆解到评测驱动 2026/9/2 2:26:43

FDE实战:股票分析Agent开发,从需求拆解到评测驱动

这段时间我做了一个 FDE 实战项目:用 Agent 开发的方式,从零打造一个股票分析智能体。整个过程用了四个关键方法:需求拆解、文档先行、Vibe-Coding、评测驱动。最初我以为难点在模型能力,实际跑完后发现,需求拆得不够清…

阅读更多 →
WinTcpS7.dll详解:S7协议与上位机PLC通讯实践指南 2026/9/2 2:26:43

WinTcpS7.dll详解:S7协议与上位机PLC通讯实践指南

简介:WinTcpS7.dll 是一份面向 VB 开发者的西门子 PLC 通讯组件,专门用于在 Visual Basic 环境下与 S7 系列 PLC 建立 TCP/IP 连接,相较旧版 W95_s7 通信更稳定高效,适用于工业自动化、产线远程监控、设备数据采集等场景。压缩包共…

阅读更多 →
编译器如何守护代码安全:从编译流程到安全加固实践 2026/9/2 2:23:43

编译器如何守护代码安全:从编译流程到安全加固实践

1. 从编译器的“黑盒”到“知己”很多 C/C 开发者都有过这样的经历:代码写完,编译一次通过,运行却崩溃;或者程序在本地好好的,上线后偶发段错误;再或者一个隐晦的未定义行为,让整个项目排查几天…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞