V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hoythan
V2EX  ›  PHP

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

  •  
  •   hoythan · 2017-07-11 14:31:51 +08:00 · 2143 次点击
    这是一个创建于 2694 天前的主题,其中的信息可能已经有所发展或是发生改变。
            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 的内容也会被改变? 如何正确的赋值才能不改变呢

    9 条回复    2017-07-11 23:22:39 +08:00
    hoythan
        1
    hoythan  
    OP
       2017-07-11 14:34:42 +08:00
    应该类似于 js 的深拷贝和浅拷贝
    hoythan
        2
    hoythan  
    OP
       2017-07-11 14:35:53 +08:00
    找到办法了
    用 clone 可以深拷贝
    xzem
        3
    xzem  
       2017-07-11 16:56:48 +08:00 via Android
    clone 好像只能管一层
    mandex
        4
    mandex  
       2017-07-11 17:18:48 +08:00
    如果只要属性不要方法的话可以用序列化或者转成 json

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

    在 PHP 5,一个对象变量已经不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。
    baiyi
        8
    baiyi  
       2017-07-11 17:23:38 +08:00
    mingyun
        9
    mingyun  
       2017-07-11 23:22:39 +08:00
    @mandex 私有属性会丢失吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3075 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:26 · PVG 22:26 · LAX 06:26 · JFK 09:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.