web-dev-qa-db-fra.com

Ajouter des propriétés à l'objet stdClass d'un autre objet

J'aimerais pouvoir faire ce qui suit:

$obj = new stdClass;
$obj->status = "success";

$obj2 = new stdClass;
$obj2->message = "OK";

Comment puis-je étendre $ OBJ afin qu'il contienne les propriétés de $ obj2, par exemple:

$obj->status //"success"

$obj->message // "OK"

Je sais que je pourrais utiliser un tableau, ajoutez toutes les propriétés au tableau, puis jetez-la à l'objet, mais y a-t-il un moyen plus élégant, quelque chose comme ceci:

étendre ($ obj, $ obj2); // ajoute toutes les propriétés de $ obj2 à $ obj

Merci!

19
Florin

C'est plus le long des lignes de leur façon que vous ne vouliez pas le faire ....

$extended = (object) array_merge((array)$obj, (array)$obj2);

Cependant, je pense que ce serait un peu mieux que d'avoir à itération sur les propriétés.

24
Chris Gutierrez

si l'objet est l'instance de stdclass (c'est dans votre cas), vous pouvez simplement étendre votre objet comme ...

$obj = new stdClass;
$obj->status = "success";

$obj2 = new stdClass;
$obj2->message = "OK";

$obj->message = $message;
$obj->subject = $subject;

.... et autant que vous le souhaitez.

10
Mohit Mehta

Vous pouvez utiliser get_Object_vars () sur l'un des objectifs stdClass, itérale à travers ceux-ci et les ajoutez à l'autre:

function extend($obj, $obj2) {
    $vars = get_object_vars($obj2);
    foreach ($vars as $var => $value) {
        $obj->$var = $value;
    }
    return $obj;
}

Je ne sais pas si vous le juge plus élégant, pensez vous.

EDIT: Si vous n'êtes pas radingy à propos de Stockage les au même endroit, jetez un coup d'œil à cette réponse à une question très similaire .

5
pinkgothic
1
pinaki