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

2017-07-11 14:31:51 +08:00
 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 的内容也会被改变? 如何正确的赋值才能不改变呢

2087 次点击
所在节点    PHP
9 条回复
hoythan
2017-07-11 14:34:42 +08:00
应该类似于 js 的深拷贝和浅拷贝
hoythan
2017-07-11 14:35:53 +08:00
找到办法了
用 clone 可以深拷贝
xzem
2017-07-11 16:56:48 +08:00
clone 好像只能管一层
mandex
2017-07-11 17:18:48 +08:00
如果只要属性不要方法的话可以用序列化或者转成 json

$b = json_decode(json_encode($a));
mandex
2017-07-11 17:21:16 +08:00
$b = unserialize(serialize($a));//序列化然后反序列化
gouchaoer
2017-07-11 17:22:54 +08:00
php 节点被刷屏了
baiyi
2017-07-11 17:23:09 +08:00
多看文档

在 PHP 5,一个对象变量已经不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。
baiyi
2017-07-11 17:23:38 +08:00
mingyun
2017-07-11 23:22:39 +08:00
@mandex 私有属性会丢失吧

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

https://www.v2ex.com/t/374512

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

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

© 2021 V2EX