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