Ответ 1
Это больше похоже на то, что вы не хотели этого делать....
$extended = (object) array_merge((array)$obj, (array)$obj2);
Однако я думаю, что это будет немного лучше, чем перебирать свойства.
Я хотел бы иметь возможность сделать следующее:
$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
Спасибо!
Это больше похоже на то, что вы не хотели этого делать....
$extended = (object) array_merge((array)$obj, (array)$obj2);
Однако я думаю, что это будет немного лучше, чем перебирать свойства.
если объект является экземпляром stdClass (что в вашем случае), вы можете просто расширить свой объект, как...
$obj = new stdClass;
$obj->status = "success";
$obj2 = new stdClass;
$obj2->message = "OK";
$obj->message = $message;
$obj->subject = $subject;
.... и сколько угодно.
Вы можете использовать get_object_vars() на одном из объектов stdClass
, перебирать их и добавлять их к другому:
function extend($obj, $obj2) {
$vars = get_object_vars($obj2);
foreach ($vars as $var => $value) {
$obj->$var = $value;
}
return $obj;
}
Не уверен, если вы сочтете это более элегантным, заметьте.
Изменить: если вы не скупитесь на то, чтобы хранить их в одном месте, взгляните на на этот очень похожий вопрос.
Посмотрите на клонирование объектов http://php.net/manual/en/language.oop5.cloning.php