Adicione propriedades ao objeto stdclass de outro objeto
-
27-09-2019 - |
Pergunta
Eu gostaria de poder fazer o seguinte:
$obj = new stdClass;
$obj->status = "success";
$obj2 = new stdClass;
$obj2->message = "OK";
Como posso estender $ obj para que ele contenha as propriedades de $ obj2, por exemplo:
$obj->status //"success"
$obj->message // "OK"
Eu sei que poderia usar uma matriz, adicionar todas as propriedades à matriz e depois lançar isso de volta ao objeto, mas existe uma maneira mais elegante, algo assim:
estender ($ obj, $ obj2); // adiciona todas as propriedades de $ obj2 a $ obj
Obrigado!
Solução
Isso é mais parecido com a maneira que você não queria fazer isso ....
$extended = (object) array_merge((array)$obj, (array)$obj2);
No entanto, acho que isso seria um pouco melhor do que ter que itera sobre as propriedades.
Outras dicas
Se o objeto for a instância do stdclass (que está no seu caso), você pode simplesmente estender seu objeto como ...
$obj = new stdClass;
$obj->status = "success";
$obj2 = new stdClass;
$obj2->message = "OK";
$obj->message = $message;
$obj->subject = $subject;
.... e quantos quiser.
Você poderia usar get_object_vars () em um dos stdClass
Objeto, itera através deles e adicione -os ao outro:
function extend($obj, $obj2) {
$vars = get_object_vars($obj2);
foreach ($vars as $var => $value) {
$obj->$var = $value;
}
return $obj;
}
Não tenho certeza se você consideraria isso mais elegante, lembre -se.
Editar: se você não é mesquinho sobre armazenando eles no mesmo lugar, dê uma olhada Esta resposta para uma pergunta muito semelhante.
dê uma olhada na clonagem de objetos http://php.net/manual/en/language.oop5.cloning.php