【问题标题】:Object (into Array) variables in PHPPHP中的对象(到数组)变量
【发布时间】:2012-02-10 22:16:14
【问题描述】:

代码如下:

$obj = new stdClass;
$obj->AAA = "aaa";
$obj->BBB = "bbb";

$arr = array($obj, $obj);

print_r($arr);

$arr[1]->AAA = "bbb";
$arr[1]->BBB = "aaa";

print_r($arr);

这是输出:

Array
(
    [0] => stdClass Object
        (
            [AAA] => aaa
            [BBB] => bbb
        )

    [1] => stdClass Object
        (
            [AAA] => aaa
            [BBB] => bbb
        )

)

Array
(
    [0] => stdClass Object
        (
            [AAA] => bbb
            [BBB] => aaa
        )

    [1] => stdClass Object
        (
            [AAA] => bbb
            [BBB] => aaa
        )

)

谁能给我解释一下为什么所有的对象变量(在数组中)都被改变了?

对不起,我的英语不好。我不是以英语为母语的人。

【问题讨论】:

    标签: php arrays variables object


    【解决方案1】:

    数组存储的是对同一个对象的两个引用,而不是两个不同的对象,如下所示:

    大批( 0 => ---|标准类 |-------> [AAA] => bbb 1 => ---| [BBB] => aaa )

    如果要复制对象,请使用clone,它执行对象的浅拷贝:

    $arr = array($obj, clone $obj);
    

    【讨论】:

      【解决方案2】:

      你需要创建一个新的类实例

      $obj2 = new stdClass;
      $obj2->AAA = "bbb";
      $obj2->BBB = "aaa";
      
      $arr = array($obj, $obj2);
      

      否则,您的数组包含 2 个指向同一对象的指针。 update 语句改变了底层对象。

      【讨论】:

        猜你喜欢
        • 2018-11-26
        • 2013-03-09
        • 2012-05-08
        • 1970-01-01
        • 1970-01-01
        • 2013-07-26
        • 2012-08-28
        • 2016-03-30
        • 2017-10-30
        相关资源
        最近更新 更多