Добавьте свойства к объекту stdClass от другого объекта

Я хотел бы смочь сделать следующее:

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

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

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

$obj->status //"success"

$obj->message // "OK"

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

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

Спасибо!

17
задан Florin 16 April 2010 в 11:55
поделиться

3 ответа

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

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

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

24
ответ дан 30 November 2019 в 11:32
поделиться

посмотрите на клонирование объекта http://php.net/manual/en/language.oop5.cloning.php

1
ответ дан 30 November 2019 в 11:32
поделиться

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

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

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

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

5
ответ дан 30 November 2019 в 11:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: