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!

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top