Я хотел бы иметь возможность сделать следующее:
$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