PHP StdClass 类型的变量如何赋值给其他变量?

2017 年 7 月 11 日
 hoythan
        echo '--------------------------------------';
        $a = new \StdClass();
        $a->a = '1';
        $a->b = '2';


        $b = $a;
        unset($b->a);
        print_r($a);
        echo '++++++++';
        print_r($b);

        echo '--------------------------------------';
        exit;

虽然用$b = $a 吧$a 赋值给了$b

但是如果 unset($b)中的内容,$a 的内容也会被改变? 如何正确的赋值才能不改变呢

2484 次点击
所在节点    PHP
9 条回复
hoythan
2017 年 7 月 11 日
应该类似于 js 的深拷贝和浅拷贝
hoythan
2017 年 7 月 11 日
找到办法了
用 clone 可以深拷贝
xzem
2017 年 7 月 11 日
clone 好像只能管一层
mandex
2017 年 7 月 11 日
如果只要属性不要方法的话可以用序列化或者转成 json

$b = json_decode(json_encode($a));
mandex
2017 年 7 月 11 日
$b = unserialize(serialize($a));//序列化然后反序列化
gouchaoer
2017 年 7 月 11 日
php 节点被刷屏了
FinnBai
2017 年 7 月 11 日
多看文档

在 PHP 5,一个对象变量已经不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。
FinnBai
2017 年 7 月 11 日
mingyun
2017 年 7 月 11 日
@mandex 私有属性会丢失吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/374512

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX