【问题标题】:How do I merge two objects? [duplicate]如何合并两个对象? [复制]
【发布时间】:2011-03-19 20:32:01
【问题描述】:

可能重复:
What is the best method to merge two PHP objects?

我有一个对象 $foo,它已经定义了一些方法和属性,还有另一个对象 $bar,它只是一组属性。我想将整个 $bar 合并到 $foo 中,使得 $bar 的所有属性都成为 $foo 的属性。

所以如果我之前有 $bar->foobar,之后我应该可以使用 $foo->foobar。

目前,我正在做以下事情:

foreach($bar as $key => $value) {
    $foo->$key = $value;
    }

但是,如果我使用数组,我只会执行以下操作之一:

$foo += $bar;

$foo = array_merge($foo, $bar);

是否有类似的方法来处理对象,或者我是否已经以正确的方式这样做了?

请注意,我不会让 $bar 本身成为 $foo 的属性,即不是 $foo->bar->foobar

【问题讨论】:

    标签: php oop object merge


    【解决方案1】:

    如果$bar 具有$foo 的所有属性,那么它就是一个Foo。因此,您的 Bar 类应该扩展(继承自)Foo。 (反之亦然,如果我把你的名字弄糊涂了!)

    如果您出于某种原因不想使用继承,您可以将一个对象保留在另一个对象中,并通过 __get() 和 __set 等魔术方法将外部对象的调用动态重定向到另一个对象的属性(参见 @987654321 @)

    【讨论】:

      【解决方案2】:

      没有将一个对象的所有属性复制到另一个对象的内置函数。

      您执行此操作的方式可能是最简单的。为 $foo 类提供 __get 方法的替代方法,该方法直接从 $bar 返回属性。

      【讨论】:

        【解决方案3】:

        试试这个代码

        echo $obj->name;  //show: carlos
        echo $obj2->lastname; //show: montalvo here
        
        $obj_merged = (object) array_merge((array) $obj, (array) $obj2);
        
        $obj_merged->name; //show: carlos
        
        $obj_merged->lastname; //show: montalvo here
        

        【讨论】:

        • 这就是答案,确定吗?
        • 应该注意这个方法只适用于属性,据我所知,不适用于php版本
        • 是否可以追加一个对象,使$obj同时包含$obj$obj2
        猜你喜欢
        • 1970-01-01
        • 2021-07-13
        • 2013-04-08
        • 2018-10-15
        • 2018-06-25
        • 2021-12-23
        • 2011-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多