如何合并两个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
)