为了账号安全,请及时绑定邮箱和手机立即绑定

合并两个PHP对象的最佳方法是什么?

合并两个PHP对象的最佳方法是什么?

PHP
弑天下 2019-08-31 15:05:29
我们有两个PHP5对象,并希望将一个内容合并到第二个。它们之间没有子类概念,因此以下主题中描述的解决方案无法应用。如何将PHP对象复制到不同的对象类型中//We have this:$objectA->a;$objectA->b;$objectB->c;$objectB->d;//We want the easiest way to get:$objectC->a;$objectC->b;$objectC->c;$objectC->d;备注:这些是对象,而不是类。这些对象包含很多字段,所以foreach会很慢。到目前为止,我们考虑将对象A和B转换为数组,然后在重新转换为对象之前使用array_merge()合并它们,但我们不能说如果这样我们感到自豪。
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

如果您的对象只包含字段(无方法),则可以:


$obj_merged = (object) array_merge((array) $obj1, (array) $obj2);

当对象具有方法时,这实际上也有效。(使用PHP 5.3和5.6测试)


查看完整回答
反对 回复 2019-08-31
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

如果您的对象只包含字段(无方法),则可以:


$obj_merged = (object) array_merge((array) $obj1, (array) $obj2);


查看完整回答
反对 回复 2019-08-31
?
浮云间

TA贡献1829条经验 获得超4个赞

您可以创建另一个对象,将对魔术方法的调用分派给底层对象。这是你的处理方式__get,但为了让它完全运作,你必须覆盖所有相关的魔术方法。您可能会发现语法错误,因为我刚从头脑中输入它。


class Compositor {

  private $obj_a;

  private $obj_b;


  public function __construct($obj_a, $obj_b) {

    $this->obj_a = $obj_a;

    $this->obj_b = $obj_b;

  }


  public function __get($attrib_name) {

    if ($this->obj_a->$attrib_name) {

       return $this->obj_a->$attrib_name;

    } else {

       return $this->obj_b->$attrib_name;

    }

  }

}

祝好运。


查看完整回答
反对 回复 2019-08-31
  • 3 回答
  • 0 关注
  • 1087 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信