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

我们有两个 PHP5 对象,希望将其中一个对象的内容合并到第二个对象中。它们之间没有子类的概念,因此下面主题中描述的解决方案无法适用。

[如何将 PHP 对象复制到不同的对象类型中][1]

//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()将它们合并,再重新转换为对象,但我们不能说我们对此感到自豪。

如果你的对象只包含字段(没有方法),这个方法也行得通:

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

你可以创建另一个对象,将对魔法方法的调用分派给底层对象。 下面是处理 __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;
    }
  }
}

祝你好运。

评论(6)
foreach($objectA as $k => $v) $objectB->$k = $v;
评论(3)