¿Cómo fusionar dos objetos PHP?

Dados dos objetos de la misma clase y la tarea es fusionar ambos objetos en un solo objeto.
Enfoque 1: Convierta el objeto en una array de datos y combínelos usando la función array_merge() y convierta esta array combinada nuevamente en un objeto de clase stdClass .
Nota: Al fusionar los objetos usando array_merge(), los elementos de la array en el argumento 1 se sobrescriben con los elementos de la array en el argumento 2. Esto puede anular los elementos resultantes en el objeto final si la array en argument2 tiene valores nulos. 
Nota: Las funciones no se copian con este enfoque. Solo use este enfoque si la clase solo contiene variables.
Ejemplo: 
 

php

<?php
// PHP program to merge two objects
 
class Geeks {
    // Empty class
}
 
$objectA = new Geeks();
$objectA->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);
 
?>
Producción: 

stdClass Object
(
    [a] => 1
    [b] => 2
    [d] => 4
    [e] => 5
    [f] => 6
)

 

Enfoque 2: combine el objeto usando el método array_merge() y convierta esta array combinada en un objeto usando la función convertObjectClass. Esta función se usa para convertir el objeto de la clase inicial en datos serializados usando el método serialize() . Deserialice los datos serializados en la instancia de la clase final utilizando el método unserialize() . Con este enfoque, obtenga un objeto de la clase Geeks definida por el usuario en lugar de la clase estándar stdClass .
Ejemplo: 
 

php

<?php
// PHP program to merge two objects
 
class Geeks {
    // Empty class
}
 
$objectA = new Geeks();
$objectA->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);
 
?>
Producción: 

Geeks Object
(
    [a] => 1
    [b] => 2
    [d] => 4
    [e] => 5
    [f] => 6
)

 

Enfoque 3: cree un nuevo objeto de la clase original y asigne todas las propiedades de ambos objetos a este nuevo objeto mediante el bucle foreach. Este es un enfoque simple y limpio de fusionar dos objetos.
Ejemplo: 
 

php

<?php
// PHP program to merge two objects
 
class Geeks {
    // Empty class
}
 
$objectA = new Geeks();
$objectA->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);
 
?>
Producción: 

Geeks Object
(
    [a] => 1
    [b] => 2
    [d] => 3
    [e] => 4
    [f] => 5
    [g] => 6
)

 

Publicación traducida automáticamente

Artículo escrito por Harshit Saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *