Добавление свойств объекта stdClass из другого объекта

Я хотел бы иметь возможность сделать следующее:

$obj = new stdClass;
$obj->status = "success";

$obj2 = new stdClass;
$obj2->message = "OK";

Как я могу расширить $obj так, чтобы он содержал свойства $obj2, например:

$obj->status //"success"

$obj->message // "OK"

Я знаю, что могу использовать массив, добавлять все свойства в массив и затем отбрасывать его обратно на объект, но есть более элегантный способ, примерно такой:

extend ($ obj, $obj2);//добавляет все свойства из $obj2 в $obj

Спасибо!

Ответы

Ответ 1

Это больше похоже на то, что вы не хотели этого делать....

$extended = (object) array_merge((array)$obj, (array)$obj2);

Однако я думаю, что это будет немного лучше, чем перебирать свойства.

Ответ 2

если объект является экземпляром stdClass (что в вашем случае), вы можете просто расширить свой объект, как...

$obj = new stdClass;
$obj->status = "success";

$obj2 = new stdClass;
$obj2->message = "OK";

$obj->message = $message;
$obj->subject = $subject;

.... и сколько угодно.

Ответ 3

Вы можете использовать get_object_vars() на одном из объектов stdClass, перебирать их и добавлять их к другому:

function extend($obj, $obj2) {
    $vars = get_object_vars($obj2);
    foreach ($vars as $var => $value) {
        $obj->$var = $value;
    }
    return $obj;
}

Не уверен, если вы сочтете это более элегантным, заметьте.

Изменить: если вы не скупитесь на то, чтобы хранить их в одном месте, взгляните на на этот очень похожий вопрос.