📜  如何合并两个PHP对象?

📅  最后修改于: 2022-05-13 01:54:11.176000             🧑  作者: Mango

如何合并两个PHP对象?

给定同一类的两个对象,任务是将两个对象合并为单个对象。

方法1:将对象转换为数据数组并使用 array_merge()函数合并它们,并将此合并的数组转换回类stdClass 的对象。

注意:在使用 array_merge() 合并对象时,argument1 中的 array 元素会被 argument2 中的 array 元素覆盖。如果argument2 中的数组具有空值,则这可能会使最终对象中的结果元素无效。

注意:使用此方法不会复制函数。仅当类仅包含变量时才使用此方法。

例子:



a = 1;
$objectA->b = 2;
$objectA->d = 3;
  
$objectB = new Geeks();
$objectB->d = 4;
$objectB->e = 5;
$objectB->f = 6;
  
$obj_merged = (object) array_merge(
        (array) $objectA, (array) $objectB);
          
print_r($obj_merged);
  
?>
输出:
stdClass Object
(
    [a] => 1
    [b] => 2
    [d] => 4
    [e] => 5
    [f] => 6
)

方法 2:使用 array_merge() 方法合并对象,并使用 convertObjectClass函数将此合并的数组转换为对象。该函数用于使用 serialize() 方法将初始类的对象转换为序列化数据。使用 unserialize() 方法将序列化数据反序列化为最终类的实例。使用这种方法获得用户定义类Geeks而不是标准类stdClass 的对象

例子:

a = 1;
$objectA->b = 2;
$objectA->d = 3;
  
$objectB = new Geeks();
$objectB->d = 4;
$objectB->e = 5;
$objectB->f = 6;
  
// Function to convert class of given object
function convertObjectClass($array, $final_class) {
    return unserialize(sprintf(
        'O:%d:"%s"%s',
        strlen($final_class),
        $final_class,
        strstr(serialize($array), ':')
    ));
}
  
$obj_merged = convertObjectClass(array_merge(
        (array) $objectA, (array) $objectB), 'Geeks');
  
print_r($obj_merged);
  
?>
输出:
Geeks Object
(
    [a] => 1
    [b] => 2
    [d] => 4
    [e] => 5
    [f] => 6
)

方法三:新建一个原类的对象,通过foreach循环将两个对象的所有属性都赋值给这个新对象。这是合并两个对象的简单而干净的方法。

例子:

a = 1;
$objectA->b = 2;
$objectA->d = 3;
  
$objectB = new Geeks();
$objectB->e = 4;
$objectB->f = 5;
$objectB->g = 6;
  
// Function to convert class of given object
function convertObjectClass($objectA,
                $objectB, $final_class) {
  
    $new_object = new $final_class();
  
    // Initializing class properties
    foreach($objectA as $property => $value) {
        $new_object->$property = $value;
    }
      
    foreach($objectB as $property => $value) {
        $new_object->$property = $value;
    }
  
    return $new_object;
}
  
$obj_merged = convertObjectClass($objectA, 
                        $objectB, 'Geeks');
                          
print_r($obj_merged);
  
?>
输出:
Geeks Object
(
    [a] => 1
    [b] => 2
    [d] => 3
    [e] => 4
    [f] => 5
    [g] => 6
)