3 回答
![?](http://img1.sycdn.imooc.com/545845d30001ee8a02200220-100-100.jpg)
TA贡献1784条经验 获得超8个赞
如果您的对象只包含字段(无方法),则可以:
$obj_merged = (object) array_merge((array) $obj1, (array) $obj2);
当对象具有方法时,这实际上也有效。(使用PHP 5.3和5.6测试)
![?](http://img1.sycdn.imooc.com/54584ee0000179f302200220-100-100.jpg)
TA贡献1911条经验 获得超7个赞
如果您的对象只包含字段(无方法),则可以:
$obj_merged = (object) array_merge((array) $obj1, (array) $obj2);
![?](http://img1.sycdn.imooc.com/5333a01a0001ee5302000200-100-100.jpg)
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;
}
}
}
祝好运。
- 3 回答
- 0 关注
- 1087 浏览
添加回答
举报